2011-01-30 11 views
54

He leído acerca de scrypt y algunas de sus ventajas sobre el algoritmo de hash bcrypt en ciertas circunstancias..NET implementación de scrypt

De todos modos, parece scrypt no es tan utilizado hasta ahora. ¿Alguien ha visto hasta ahora una implementación de .NET (favorecido en C#)?

+0

encontró el enlace de la [artículo original] (http://www.bsdcan.org /2009/schedule/attachments/87_scrypt.pdf) (se han eliminado algunos enlaces del que publicaste) – Cameron

+8

No estoy seguro de cuánto s la cripta fue revisada por buenos criptógrafos. Y la revisión es muy importante antes de confiar en crypto. – CodesInChaos

+0

@ Cameron: ¿No es el mismo PDF al que hace referencia el sitio Tarsnap: http://www.tarsnap.com/scrypt/scrypt.pdf? –

Respuesta

52

Finalmente encontré una implementación de scrypt en C# en el CryptSharp library.
La biblioteca es de código abierto y utiliza el ISC license.

Historial de versiones

1.2.0 23 de enero de 2011:
El Scrypt KDF se admite ahora como CryptSharp.Utility.SCrypt.
Se agregó Salsa20 de djb, requerido por SCrypt.

+5

Gracias a Dios por opensource ay. https: // github.com/ChrisMcKee/cryptsharp & en NUGET https://nuget.org/packages/CryptSharp/ –

+0

Nunca escuché hablar de la licencia ISC antes. – nawfal

19

Hay una nueva aplicación de Scrypt para .NET aquí: https://github.com/replicon/Replicon.Cryptography.SCrypt

A diferencia CryptoSharp, que es una gran biblioteca, éste se implementa como un envoltorio de empaquetado alrededor de una biblioteca nativa. Esto le permite usar instrucciones de nivel nativo (como SSE2) para mejorar bastante el rendimiento de la implementación.

El inconveniente es que debe contener ensamblajes nativos compilados, detectar el correcto para usar, desempaquetarlo y luego cargarlo. Eso significa que no es ideal para todos los entornos, pero funciona muy bien donde funciona.

+0

Prefiero mantener las dlls nativas en el mismo directorio que el ensamblado en lugar de desempaquetarlas bajo demanda. – CodesInChaos

+4

¿No es todo el punto que no está funcionando? –

+42

Martin: Claro, el objetivo de Scrypt es que incluso cuando se implementa de manera ideal, no es efectivo. Pero no desea usar una biblioteca que funcione diez veces más despacio que la implementación que un atacante de fuerza bruta va a usar. Eso hará que uses parámetros de ajuste que parecen fuertes, pero en realidad son mucho más débiles de lo que esperabas. – mfenniak

15

En caso de que, como yo, haya llegado a esta pregunta a través de un google rápido (apareció como el enlace superior), ahora puede descargar SCrypt como paquete Nuget en su proyecto.

PM> Install-Package Scrypt.NET 

Uso como sigue:

ScryptEncoder encoder = new ScryptEncoder(); 
string hashsedPassword = encoder.Encode("mypassword"); 

y comparando

ScryptEncoder encoder = new ScryptEncoder(); 
bool areEquals = encoder.Compare("mypassword", hashedPassword); 

Github link here

Cuestiones relacionadas