Antes de que todos se pongan a gritar: "NUNCA HAGAS TU PROPIO CRIPTO", técnicamente (todavía estoy a mitad de camino), pero aparte de eso, estoy haciendo un protocolo tipo TLS, pero mucho más ligero.
Necesitaba asegurar la comunicación entre varios sistemas integrados con muy poca RAM / ROM y potencia del procesador (bueno, tiene 100 MHz, pero gran parte de ella está en uso constante y no puede interrumpirse).
Lo que voy a hacer es usar AES-128 con GCM (o CBC + HMAC) para asegurar la comunicación entre los dispositivos. Algunos dispositivos solo pueden usar GCM, otros usan CBC + HMAC, así que (aún trabajando en ello) tengo que hacer una estructura similar a TLS para acordar cuál usar (el dispositivo se comunica a través de un servidor, no de igual a igual, por lo que solo 1 de los 2 no es un problema; el servidor solo necesita los dos).
He estado investigando mucho estos últimos meses (2 1/2), y me gustaría decir que he cubierto lo básico. Ahora estoy empezando con la implementación de todo lo que he encontrado (uso de claves, IV, nonces, cifrado, luego MAC, etc.).
Ahora viene la pregunta: cuando termine, quiero verificar el código que creé. Obviamente, el escrutinio de nivel profundo por el que TLS ha pasado no será alcanzable, pero ¿qué formas hay? ¿Hay sitios donde puedo publicar mi código para revisión? ¿Hay empresas que puedan 'certificarlo'? ¿Qué ocurriría normalmente cuando una empresa creara una comunicación segura y desea verificar si protege contra las cosas que imaginaron?
Y sí, sé que no estoy usando una PKI. El hardware está en un entorno seguro, y no se pueden agregar nuevos dispositivos al servidor (el servidor mantiene una lista de dispositivos que pueden conectarse y monitorear si alguna vez se desconecta), por lo que la compañía dijo que PKI podría ser algo que considerarían más adelante, pero para una primera versión no sería necesario.
EDITAR: Quiero aclarar (estoy retirando unas pocas palabras). Usaré TLS para crear este protocolo, y la cantidad de usos de TLS aún no está clara. Cuando sea posible, simplemente trataré de eliminar todo lo que no necesito de TLS y lo crearé de esa manera, podría tomar partes de él (cifrar-luego-mac, agregar IV al texto cifrado, etc.) y usarlo.
Pero de cualquier manera, no es TLS e incluso solo eliminar elementos del código fuente de TLS podría presentar puntos débiles, por lo que aún es necesaria una 'auditoría'.