Estoy buscando convertir mis propias operaciones de firma digital en un programa que estoy escribiendo, y los matices de la criptografía están un poco más allá de mí.
¡Bandera roja! Nunca implementes criptografía por tu cuenta. Nunca. Nunca nunca nunca . Incluso si está utilizando algoritmos estándar y probados, nunca debe ser el que los ponga a todos juntos. A menos que tenga una comprensión muy profunda de la criptografía, ¡no intente implementarla usted mismo! Utilice una biblioteca que lo abstraiga, como libsodium. ¡No implementes crypto tu mismo!
¿Cuáles son mis opciones y mejores opciones?
Si ninguno de los algoritmos enumerados como seguros en el sitio de Daniel Bernstein son compatibles con el sistema que está utilizando, entonces no hay nada que pueda hacer para no poder acceder a una biblioteca con soporte o implementar la curva usted mismo. Sin embargo, una breve búsqueda muestra un documento que afirma que Windows es compatible con Curve25519, una curva segura diseñada por el creador del sitio web que has vinculado.
¿P-521 corrige las deficiencias de los demás?
No. P-521 es similar a las otras curvas NIST porque usan una constante de origen desconocido. Debido a que es más grande, pretende ofrecer más seguridad que las otras curvas pequeñas. Tenga en cuenta que las "deficiencias" que señala son altamente teóricas. La preocupación es que la constante fue elegida intencionalmente para debilitar la curva. Debido a que la constante fue generada por SHA-1, una debilidad tendría que indicar que un subconjunto muy grande de posibles curvas es vulnerable, y que el NIST, a través de la NSA, lo sabía. Esto es posible, pero improbable. Es probable que las curvas NIST sean perfectamente bien .
¿La implementación de una curva es tan simple como convertir la fórmula matemática en una función?
No estoy seguro de cómo se puede hacer exactamente esto en .NET Core. Sin embargo, veo una pregunta sobre Desbordamiento de pila que indica que es realmente posible. No sé nada más allá de eso.
¿Es mejor que me quede con RSA?
Esto depende de su caso de uso. Si lo está utilizando para el intercambio de claves, entonces no debe usar RSA. La razón es que RSA no proporciona secreto hacia adelante, mientras que ECC (incluso las curvas NIST) sí lo hace. Si está utilizando el algoritmo en una firma digital (como indicó), sería seguro recurrir a RSA en su lugar. Pero, de nuevo, ¡debes no implementar tu propia criptografía!