Almacenamiento de claves de licencia

4

Estoy creando una aplicación que genera la clave de licencias y la almacena en una base de datos (las licencias se verifican en línea). No deseo almacenar estas licencias sin daños, en caso de robo de la base de datos.

Sin embargo, una vez que la clave de licencia está en hash (con sal), resulta muy difícil verificar si existe una clave determinada en la base de datos, ya que la sal utilizada cambiará con cada clave.

¿Cuál es la mejor solución para poder encontrar y verificar una clave de licencia con hash? He considerado la mitad de la clave de licencia sin sal, y la he usado para identificar la fila de la licencia antes de verificar la clave completa con sal. ¿Es esto demasiado arriesgado?

También he considerado usar el último 1/4 de la clave como un identificador (por ejemplo, AAAB = 1, AAAC = 2, etc.), para una longitud de clave de 16, esto permite 2 ^ 20 teclas.

( Nota al margen: las teclas están codificadas en base32, y tendrán 16 caracteres de longitud (pero podrían elegirse por más tiempo). La aplicación es general, es decir, no está vinculada a ningún caso de uso en particular , por lo que no hay una estimación fija sobre el número de licencias requeridas, aunque la longitud de la clave podría aumentarse dependiendo de la estimación.

    
pregunta Stephen Harris 30.09.2012 - 18:02
fuente

1 respuesta

4
  

Sin embargo, una vez que la clave de licencia está en hash (con sal), resulta muy difícil verificar si existe una clave en la base de datos, ya que la sal utilizada cambiará con cada clave.

Las sales están diseñadas para usarse cuando ya tienes un identificador para buscar el campo de hash correspondiente. Por ejemplo, no observa si existe una "contraseña" en ninguno de los campos de la contraseña, sino que para "usuario" la contraseña es "contraseña".

Si va a eliminar sus contraseñas (licencias), deberá asignarle un identificador único que se almacene sin ningún hashing.

Prependa una ID única de ancho fijo a los primeros bytes de sus licencias o use un delimitador y divida la ID antes de hash en el servidor.

    
respondido por el Jeff Ferland 30.09.2012 - 18:30
fuente

Lea otras preguntas en las etiquetas