Aunque he colaborado en desarrollar los procesos de cifrado y descifrado que hacen posible la comunicación con este monstruo tengo una idea muy socrática sobre el tema: es imposible saber nada sobre criptografía. Las matemáticas son demasiado complejas. Los números son demasiado chungos. Bueno: dejémoslo en que Bruce Schneier, los RSA y sobre todo Daniel J. Bernstein sí saben algo de criptografía, pero para el resto de los mortales es terreno vedado. Y peor que no saber es creer que sabes.
Si eres programador puedes sucumbir a la tentación de crear tu propio algoritmo. Se dice que cualquier idiota puede inventar un algoritmo de cifrado que él mismo sea incapaz de reventar. No seas iluso. Simplemente no tienes los conocimientos necesarios. Los algoritmos «oficiales», incluso aquellos que ya han sido reventados entre risas, fueron diseñados por gente mucho más lista que tú que bien podrían ser de otro planeta.
Relacionado con lo anterior, tampoco caigas en la trampa de desarrollar tu propia implementación de los algoritmos conocidos. Así, sobre el papel, parecen fáciles; total, solo es un meneo de bits, sujétame la cerveza mientras lo hago. Además seguro que se te ocurre alguna optimización («¿Pa qué hace esto? ¡Si no hace falta!») e incluso alguna mejora («¡Ya que tengo aquí este otro número, voy a hacer un XOR con el resultado y todo será mucho más seguro!»). No estás capacitado. No entiendes lo que estás haciendo. Los números son demasiado chungos. La cagarás y luego vendrán los gritos y el rechinar de dientes.
Si tienes que almacenar passwords en una base de datos no creas que eres tan listo y te inventes algún truquillo, total, hago un hash y ya está. No, no está. Algún día habrá una fuga y toda la tropa se partirá la polla cuando vea tus ficheros y cómo guardas los datos. Es un problema resuelto. La librería de desarrollo que usas seguro que tiene una primitiva para eso y, si no la tiene, tírala a la basura y usa otra que sí la tenga.
Si solo eres usuario de la criptografía no lo tienes mucho mejor. No podrás inventar nada pero cagarla es muy fácil sobre todo con herramientas tan complejas como el PGP. Tarde o temprano reenviarás en claro el contenido de un mensaje cifrado a quien no debes y quedarás como un imbécil (o en los tribunales). Y parte del problema será que, como estás usando herramientas criptográficas, te sientes seguro y bajas la guardia.
Entonces, ¿todo está perdido? No, todo no. Si tienes que desarrollar usa los protocolos y los algoritmos que los listos recomiendan. Y no los implementes tú, cabezabolo: usa una librería que tenga lo último sin lastres de compatibilidad hacia atrás y que sea difícil usar mal. Es decir, usa libsodium.
Claro que no eres el único que se cree más listo que nadie: casi a diario se publican noticias de empresas que sacan al mercado productos milagrosos con algoritmos recién inventados y que van a cambiar la forma de percibir el mundo de la seguridad y la privacidad. Esta gente no lo hace por ingenuidad como tú: son estafadores y delincuentes. Bruce Schneier colecciona estas cosas en su web y se parte la caja llamándolas aceite de serpiente (que, como deberías saber, es un método más de «medicina» tradicional basado en cero evidencias científicas). Por cierto, su siguiente libro se va a llamar Click Here To Kill Everybody que es un título que yo había inventado primero.