Criptografía en Python
Criptografía en Python
Criptografía en Python
1. ANTECEDENTES
¿Qué es AES?
AES (Advanced Encryption Standard, en inglés), también
conocido como Rijndael (pronunciado "Rain Doll" en inglés), es un
esquema de cifrado por bloques adoptado como un estándar de cifrado por el
gobierno de los Estados Unidos, creado en Bélgica. Se transformó en un
estándar efectivo el 26 de mayo de 2002. Desde 2006, el AES es uno de los
algoritmos más populares usados en criptografía simétrica.
• Counter (CTR):
Al igual que OFB, el modo contador convierte una unidad de
cifrado por bloques en una unidad de flujo de cifrado. Genera el
siguiente bloque en el flujo de claves cifrando valores
sucesivos de un contador. El contador puede ser cualquier
función sencilla que produzca una secuencia de números donde los
resultados se repiten con muy baja frecuencia. Si bien la
operación más usada es un contador, el modo CTR tiene
características similares al OFB, pero permite también usar una
propiedad de acceso aleatorio para el descifrado.
La Librería pycryptodome
Python no es solamente conocido por tener una sintaxis legible por humanos,
también se le conoce por la cantidad excesivas (aunque útiles) de librerías,
módulos y demás. pycryptodome es una librería que utiliza primitivas
criptográficas de bajo-nivel, está escrita mayormente en python, pero para
uso crítico (como el rendimiento) se utilizan algunas extensiones escritas
en C.
Pycryptodome en una bifurcación de la vieja librería pycrypto, que trae con
sí, las siguientes mejoras:
• Modos de cifrado autenticados (GCM, CCM, EAX, SIV, OCB)
• AES acelerado en plataformas Intel a través de AES-NI
• Soporte de primera clase para PyPy
• Criptografía de curvas elípticas (solo curvas NIST P-256, P-384 y P-521)
• API mejor y más compacta (atributos nonce y
iv para cifrados, generación automática de nonces e IVs
aleatorios, modo de cifrado CTR simplificado y más)
• SHA-3 (incluidos los XOF SHAKE), algoritmos hash SHA-512 y BLAKE2
truncados
• Cifrados de flujo Salsa20 y ChaCha20/XChaCha20
• Poly1305 MAC
• Cifrados autenticados ChaCha20-Poly1305 y XChaCha20-Poly1305
• funciones de derivación scrypt, bcrypt y HKDF
• Deterministic (EC)DSA
• Contenedores de claves PKCS-8 protegidos con contraseña
• Esquema de intercambio secreto de Shamir
• Los números aleatorios consiguen originados directamente del sistema
operativo (y no de un CSPRNG [Generador de Números
Criptográficamente
Seguros, en español] en el espacio de usuario)
• Proceso de instalación simplificado, que incluye un mejor soporte para
Windows
• Generación de claves RSA y DSA más limpia (basada en gran medida en
FIPS
186-4)
• Limpieza importante y simplificación de la base de código
2. DESARROLLO
Lo primero que hay que saber, es que necesitamos calcular todo lo que el destinatario
nos ha enviado. En el caso del nonce ímplicitamente estamos colocando un índice del
0-16 (la constante block_size del módulo AES vale 16), es recomendable usar la
constante explícitamente en vez del número que conozcamos. Ya partiendo con el
siguiente dato deseado, el tag, que ahora debe comenzar con un índice de 16-32 y por
último, ciphertext con un índice de 32-[Hasta el último dato].
2.3 RESOLVER
Ya hemos presenciado lo más trivial de la usabilidad de AES en python gracias a la
disposición de la librería pycryptodome, pero ahora pongamos en práctica lo que hemos
creado con tanto esfuerzo.
Nota: Para lo cual debe instalar Python y Visual Studio Code, y luego crear el archivo y
subirlo al aula virtual como práctica de criptografía simétrica.
Adicional quiero mencionar que deben ingresar para ejecutar las funciones la
clave_secreta y el mensaje original, tomando en cuenta que debe estar en formato bytes
(al comienzo colocar la b y a continuación el texto), y visualizar las 2 salidas.