Criptografía

sgcWebSockets incluye sgcCrypto, una biblioteca de criptografía de propósito general escrita íntegramente en Pascal puro. No depende de OpenSSL ni de ninguna otra biblioteca externa, y compila sin cambios desde Delphi 7 hasta Delphi 13, en Win32, Win64, Linux64, macOS e iOS.

 

La biblioteca cubre el hash y la autenticación de mensajes, el hash de contraseñas y la derivación de claves, el cifrado simétrico, la criptografía de clave pública clásica, la criptografía poscuántica, los certificados X.509, las contraseñas de un solo uso, el cifrado de archivos y un hash difuso para la detección de casi duplicados. Está organizada como una unidad por familia de algoritmos (sgcCrypto_AES, sgcCrypto_MLKEM, sgcCrypto_TLSH, y así sucesivamente), de modo que una aplicación solo incorpora el código que realmente utiliza.

 

Cada función es una llamada sencilla que recibe y devuelve TBytes: no hay componentes que colocar en un formulario ni configuración en tiempo de diseño. La implementación de cada algoritmo listado a continuación se verificó, byte a byte, frente a una implementación independiente del mismo estándar (OpenSSL, hashlib/cryptography de Python, o una implementación de referencia publicada por los autores del estándar) y no solo frente a su propia salida, que es lo que permite detectar un error que es internamente consistente pero incorrecto.

 

Habilitar la biblioteca

 

Las unidades de criptografía pertenecen al paquete de instalación Cryptography, controlado por la definición condicional SGC_PACK_CRYPTO en sgcVer.inc. Con la definición desactivada, cada unidad sgcCrypto_* compila como un stub vacío, lo que mantiene el paquete fuera de una compilación que no lo necesita. Seleccione el paquete en el instalador, o defina SGC_PACK_CRYPTO en las opciones de su proyecto si compila desde el código fuente.

 

Si un proyecto debe usar únicamente algoritmos aprobados por FIPS, la definición opcional SGC_CRYPTO_FIPS elimina de las unidades sgcCrypto todos los demás algoritmos en tiempo de compilación. Está desactivada por defecto. Vea Modo FIPS para saber qué conserva, qué elimina y por qué no es una validación FIPS 140-3.

 

Las unidades sgcCrypto también son lo que permite que el resto de la biblioteca funcione sin OpenSSL: el interruptor en tiempo de ejecución sgcCryptoBackend (o la definición opcional SGC_NATIVE_CRYPTO) y el IOHandler iohNativeTLS. Vea Ejecutar sin OpenSSL.

 

Qué se cubre en esta página

 

La siguiente tabla es el inventario completo: cada algoritmo que implementa la biblioteca, y en qué unidad se encuentra. Las páginas siguientes explican cada familia una por una, con las firmas exactas de las funciones y un breve ejemplo en Delphi.

 

Categoría Algoritmos Estándar Unidad
Hash SHA-1, SHA-224, SHA-256, SHA-384, SHA-512 FIPS 180-4 sgcCrypto_SHA2
Hash SHA3-224, SHA3-256, SHA3-384, SHA3-512, SHAKE128, SHAKE256, cSHAKE, KMAC FIPS 202, SP 800-185 sgcCrypto_Keccak
Hash BLAKE2b (con clave, hasta 512 bits) RFC 7693 sgcCrypto_Blake2b
Hash BLAKE2s (con clave, hasta 256 bits) RFC 7693 sgcCrypto_Blake2s
Hash SipHash-2-4 — sgcCrypto_SipHash
Hash RIPEMD-160, HMAC-RIPEMD160 ISO/IEC 10118-3, RFC 2286 sgcCrypto_Legacy
Hash (heredado) MD4, MD5, DES-ECB, hash NTLM v1 — sgcCrypto_Legacy
Hash difuso Resumen TLSH y distancia — sgcCrypto_TLSH
Autenticación de mensajes HMAC-SHA1/256/384/512, HMAC-MD5 FIPS 198-1 sgcCrypto_HMAC
Autenticación de mensajes AES-CMAC RFC 4493 sgcCrypto_CMAC
Autenticación de mensajes AES-GMAC SP 800-38D sgcCrypto_CMAC
Autenticación de mensajes Poly1305 RFC 8439 sgcCrypto_Poly1305
Hash de contraseñas y KDF PBKDF2 (SHA-1/256/384/512) RFC 8018 sgcCrypto_KDF
Hash de contraseñas y KDF KDF1, KDF2, ANSI X9.63 KDF ISO 18033-2, ANSI X9.63 sgcCrypto_KDF
Hash de contraseñas y KDF scrypt RFC 7914 sgcCrypto_Scrypt
Hash de contraseñas y KDF Argon2d, Argon2i, Argon2id RFC 9106 sgcCrypto_Argon2
Hash de contraseñas y KDF HKDF (SHA-256/384) RFC 5869 sgcCrypto_HKDF
Cifrado simétrico AES-128/192/256: ECB, CBC, CFB, OFB, CTR, robo de texto cifrado CBC, GCM FIPS 197, SP 800-38A/D sgcCrypto_AES, sgcCrypto_Modes
Cifrado simétrico AES-CBC sin relleno, y los esquemas de relleno PKCS#7, cero, ANSI X9.23, ISO 7816-4, ISO 10126-2 y TBC SP 800-38A, ISO/IEC 9797-1 sgcCrypto_AES, sgcCrypto_Modes
Cifrado simétrico AES-CCM (AEAD) RFC 3610, SP 800-38C sgcCrypto_Modes
Cifrado simétrico AES Key Wrap, AES Key Wrap con relleno RFC 3394, RFC 5649 sgcCrypto_Modes
Cifrado simétrico ChaCha20, XChaCha20, Salsa20, XSalsa20 RFC 8439 sgcCrypto_ChaCha
Cifrado simétrico ChaCha20-Poly1305, XChaCha20-Poly1305 (AEAD) RFC 8439 sgcCrypto_Poly1305
Criptografía de clave pública Generación de claves RSA, RSA-OAEP, RSA-PSS, firma/verificación PKCS#1 v1.5 RFC 8017 sgcCrypto_RSA_Keys, sgcCrypto_RSA
Criptografía de clave pública Cifrado RSA PKCS#1 v1.5 RFC 8017 sgcCrypto_RSA_Keys
Criptografía de clave pública Ed25519, Ed448 (firmas) RFC 8032 sgcCrypto_Ed25519, sgcCrypto_Ed448
Criptografía de clave pública X25519, X448 (acuerdo de claves) RFC 7748 sgcCrypto_X25519, sgcCrypto_X448
Criptografía de clave pública Cifrado de caja sellada ECIES — sgcCrypto_ECIES
Criptografía de clave pública ECDSA / ECDH en NIST P-256, P-384, P-521 FIPS 186-5 sgcCrypto_EC, sgcCrypto_ECCurves
Criptografía de clave pública ECDSA / ECDH en secp256k1, brainpoolP256r1, brainpoolP384r1, brainpoolP512r1 SEC 2, RFC 5639 sgcCrypto_ECCurves
Criptografía de clave pública Firmas ECDSA codificadas en DER, conversión entre bruto y DER RFC 3279 sgcCrypto_ECCurves, sgcCrypto_EC
Criptografía de clave pública Firmas Schnorr sobre secp256k1 BIP-340 sgcCrypto_ECCurves
Criptografía de clave pública Exportación e importación de claves RSA y EC: PKCS#1, PKCS#8, SEC1, SubjectPublicKeyInfo, DER y PEM RFC 8017, RFC 5958, RFC 5280 sgcCrypto_RSA_Keys, sgcCrypto_ECCurves
Criptografía poscuántica ML-KEM-512/768/1024, híbrido X25519 + ML-KEM-768, X-Wing, X25519MLKEM768, SecP256r1MLKEM768, SecP384r1MLKEM1024 FIPS 203, RFC 9935, RFC 10024, draft-connolly-cfrg-xwing-kem sgcCrypto_MLKEM, sgcCrypto_MLKEM_Hybrid
Criptografía poscuántica ML-DSA-44/65/87 FIPS 204, RFC 9881, RFC 9964 sgcCrypto_MLDSA
Criptografía poscuántica SLH-DSA-SHAKE-128s/128f/192s/192f/256s/256f FIPS 205, RFC 9909 sgcCrypto_SLHDSA
Certificados y PKI Análisis de X.509, verificación de cadena y CRL RFC 5280 sgcCrypto_X509
Certificados y PKI Generación de certificados X.509 autofirmados y de solicitudes PKCS#10 CSR RFC 5280, RFC 2986 sgcCrypto_X509_Gen
Certificados y PKI Certificados X.509 y CSR firmados con EC, nombres alternativos del sujeto de tipo URI RFC 5280, RFC 2986 sgcCrypto_X509_Gen
Certificados y PKI Lectura de PKCS#12 (.pfx, .p12): certificado hoja, cadena y clave privada. PBES2 con AES, y los esquemas heredados Triple DES y RC2 RFC 7292, RFC 9579 sgcCrypto_PKCS12
Certificados y PKI Lector y escritor DER / ASN.1, PEM, Base64 — sgcCrypto_ASN1, sgcCrypto_DER
Contraseñas de un solo uso HOTP, TOTP RFC 4226, RFC 6238 sgcCrypto_OTP
Cifrado de archivos WinZip AE-1 / AE-2 WinZip AE-2 sgcCrypto_Zip_AE2
Codificación y utilidades Hex, Base32, Base64url, comparación en tiempo constante, borrado seguro, bytes aleatorios RFC 4648 sgcCrypto_Encoding, sgcCrypto_Random

 

Explicado uno por uno

 

1. Hash y Autenticación de Mensajes: SHA-2, SHA-3, SHAKE, BLAKE2, SipHash, HMAC, AES-CMAC y Poly1305, los bloques de construcción con los que se elabora casi cualquier otro algoritmo de esta página.

 

2. Hash de Contraseñas y Derivación de Claves: PBKDF2, scrypt, Argon2id y HKDF. Almacenar una contraseña y derivar una clave a partir de un secreto ya existente son tareas distintas; esta página explica por qué y qué función encaja en cada una.

 

3. Cifrado Simétrico: AES en todos los modos que admite la biblioteca, el envoltorio de claves AES, ChaCha20/Salsa20 y sus construcciones AEAD con Poly1305, y por qué un modo autenticado debería ser la opción predeterminada.

 

4. Criptografía de Clave Pública: RSA, firmas Ed25519/Ed448, acuerdo de claves X25519/X448, ECIES, ECDSA/ECDH sobre las curvas NIST, secp256k1 y Brainpool, y firmas Schnorr BIP-340.

 

5. Criptografía Poscuántica: ML-KEM, ML-DSA y SLH-DSA, los tres esquemas estandarizados por el NIST en FIPS 203-205, y la construcción híbrida que conviene desplegar hoy.

 

6. Certificados y PKI: análisis y verificación de los certificados X.509 que recibe, y generación de sus propios certificados autofirmados y solicitudes PKCS#10, firmados con una clave RSA o EC.

 

7. Contraseñas de un Solo Uso: HOTP y TOTP, los códigos que genera una aplicación autenticadora, incluida la URI de aprovisionamiento.

 

8. Hash Difuso (TLSH): un hash sensible a la localidad para la detección de casi duplicados, a diferencia de cualquier otro hash de esta página no está pensado para la integridad ni la seguridad.

 

9. Cifrado de Archivos WinZip AE-2: el cifrado AES utilizado dentro de los archivos .zip, y qué protege y qué no.

 

10. Modo FIPS: una opción de compilación que deja en la biblioteca solo los algoritmos aprobados por FIPS, qué elimina y qué comprueba, y por qué no es una validación FIPS 140-3.

 

Demos

 

La carpeta Demos\18.Cryptography contiene siete aplicaciones ejecutables, una por cada área anterior (hash, cifrado simétrico, contraseñas, clave pública, poscuántica, certificados, y contraseñas de un solo uso con WinZip AE-2), cada una mostrando la API en uso y explicando el razonamiento detrás de las opciones recomendadas.