Este documento trata sobre la teoría de la complejidad algorítmica y su aplicación en criptografía. Explica que los algoritmos pueden clasificarse según su complejidad polinomial o no determinista, lo que da lugar a problemas computacionalmente fáciles o difíciles. Problemas criptográficos como el problema de la mochila, la factorización y el logaritmo discreto son problemas NP que son difíciles de resolver salvo que se conozca un secreto.