sgcCrypto: uma Nova Biblioteca de Criptografia para Delphi e C++ Builder | eSeGeCe Blog

sgcCrypto: uma Nova Biblioteca de Criptografia para Delphi e C++ Builder

· Componentes
Biblioteca de criptografia sgcCrypto para Delphi e C++ Builder

sgcCrypto é uma nova biblioteca de criptografia de uso geral para Delphi e C++ Builder: 43 units em Object Pascal puro cobrindo criptografia simétrica, hashing, assinaturas digitais, PKI e troca de chaves pós-quântica. Não há componentes de design-time, nenhuma classe Tsgc* e nada para arrastar para um formulário. Você adiciona uma unit à sua cláusula uses e chama uma função, da mesma forma que chamaria uma rotina da RTL.

sgcCrypto é distribuída gratuitamente com sgcWebSockets Standard, Professional e Enterprise, portanto, se você já possui qualquer uma dessas licenças, ou All-Access, você já a tem, sem nada novo para instalar ou pedir. Ela também é vendida como um pacote independente, com o runtime sgcWebSockets Core incluído, para clientes que possuem apenas o Core ou nenhuma licença do sgcWebSockets.

Como Funciona

Cada unit exporta funções e procedimentos simples que recebem TBytes e retornam TBytes. Não há objeto de contexto para alocar, nenhuma interface para implementar e nenhum sgcCrypto_Reg.pas, porque não há nada para registrar. O código-fonte completo em Pascal acompanha cada licença, de modo que uma primitiva pode ser percorrida passo a passo no seu próprio depurador, em vez de desaparecer em uma DLL ou em um binding do OpenSSL.

Nada na biblioteca depende de uma biblioteca externa. Cada algoritmo, do AES aos esquemas de assinatura pós-quânticos, é implementado diretamente na unit que o expõe, e o mesmo código-fonte compila sem alterações do Delphi 7 até o RAD Studio 13, para Win32, Win64, Linux64, macOS, iOS e Android.

uses
  sgcCrypto_Random, sgcCrypto_AES, sgcCrypto_Keccak, sgcCrypto_Ed25519,
  sgcCrypto_MLKEM;

var
  vKey, vIV, vPlain, vAAD, vTag, vCipher: TBytes;
  vDigest, vSeed, vSignature, vMessage: TBytes;
  vPublicKey, vPrivateKey, vSharedSecret, vCiphertext: TBytes;
begin
  // AES-256-GCM: authenticated encryption in one call
  vKey    := sgcRandomBytes(32);
  vIV     := sgcRandomBytes(12);
  vPlain  := TEncoding.UTF8.GetBytes('confidential payload');
  vCipher := sgcAES_GCM_Encrypt(vKey, vIV, vPlain, vAAD, vTag);

  // SHA-3-256, one call, no context object to manage
  vDigest := sgcSHA3_256(vPlain);

  // Ed25519: sign a message
  vSeed      := sgcRandomBytes(32);
  vMessage   := TEncoding.UTF8.GetBytes('sign me');
  vSignature := sgcEd25519_Sign(vSeed, vMessage);

  // ML-KEM-768: post-quantum key encapsulation (FIPS 203)
  sgcMLKEM_GenerateKeyPair(mlkem768, vPublicKey, vPrivateKey);
  sgcMLKEM_Encapsulate(mlkem768, vPublicKey, vCiphertext, vSharedSecret);
end;

Criptografia Simétrica e AEAD

sgcCrypto_AES cobre CBC, GCM e CTR. sgcCrypto_Modes adiciona ECB, OFB, CFB, o modo CTS com ciphertext stealing, e AES Key Wrap e Key Wrap with Padding (RFC 3394 e RFC 5649), e sgcCrypto_CMAC é o AES-CMAC. sgcCrypto_ChaCha implementa ChaCha20, XChaCha20, Salsa20 e XSalsa20, e sgcCrypto_Poly1305 combina o Poly1305 com eles nas cifras AEAD ChaCha20-Poly1305 e XChaCha20-Poly1305 da RFC 8439. Toda tag de autenticação, seja GCM ou Poly1305, é comparada em tempo constante, de modo que uma verificação com falha nunca revela o quão próxima a tentativa estava.

Hashing, Derivação de Chaves e MACs

sgcCrypto_SHA2 e sgcCrypto_Keccak cobrem SHA-1/2, SHA-3, SHAKE, cSHAKE e KMAC, e sgcCrypto_Blake2b/Blake2s adicionam o BLAKE2. sgcCrypto_HMAC é autenticação de mensagem com chave. Para transformar uma senha em uma chave, há sgcCrypto_KDF (PBKDF2), sgcCrypto_HKDF, sgcCrypto_Scrypt e sgcCrypto_Argon2, que implementa as três variantes do Argon2, d, i e id, vencedor da Password Hashing Competition. sgcCrypto_SipHash fornece um hash rápido com chave para chaves de tabelas hash, e sgcCrypto_TLSH é um hash de similaridade difusa (fuzzy), útil para detecção de quase-duplicados, e não como um digest criptográfico.

Assinaturas, Troca de Chaves e PKI

sgcCrypto_Ed25519 e sgcCrypto_Ed448 assinam e verificam, e sgcCrypto_X25519 e sgcCrypto_X448 realizam a troca de chaves Diffie-Hellman correspondente. sgcCrypto_ECCurves adiciona ECDSA e ECDH sobre secp256k1 e as três curvas Brainpool com nonces determinísticos da RFC 6979, e sgcCrypto_RSA_Keys cobre a geração de chaves RSA em qualquer tamanho de bits, criptografia OAEP e assinaturas PSS.

No lado da PKI, sgcCrypto_X509 analisa um certificado, verifica se foi assinado por um emissor específico, percorre e verifica uma cadeia, e checa uma CRL em busca de revogação. sgcCrypto_X509_Gen gera do zero um certificado X.509 autoassinado ou um CSR PKCS#10, incluindo subject alternative names, key usage e restrições de path-length da CA, sobre um writer DER construído exatamente para isso.

Criptografia Pós-Quântica

sgcCrypto também implementa os três padrões pós-quânticos do NIST. sgcCrypto_MLKEM é o encapsulamento de chaves FIPS 203 nos três conjuntos de parâmetros, ML-KEM-512, 768 e 1024, com rejeição implícita em caso de ciphertext malformado, de modo que uma entrada inválida nunca revela informação. sgcCrypto_MLDSA é a assinatura FIPS 204, ML-DSA-44/65/87, e sgcCrypto_SLHDSA é o FIPS 205 nos seis conjuntos de parâmetros SHAKE. Como uma suposição baseada em reticulados (lattice) é mais recente do que as curvas elípticas, sgcCrypto_MLKEM_Hybrid combina um segredo X25519 com um segredo ML-KEM em uma única chave compartilhada, o padrão de migração híbrida para o qual a indústria está convergindo.

Disponibilidade

sgcCrypto é distribuída gratuitamente com sgcWebSockets Standard, Professional e Enterprise, e com All-Access. Se você já possui qualquer uma dessas licenças, as 43 units já estão no seu instalador, sem necessidade de um pedido separado. Se você possui apenas o sgcWebSockets Core, ou nenhuma licença do sgcWebSockets, o sgcCrypto também é vendido como um pacote independente, com o runtime Core incluído. Toda licença, incluída ou independente, acompanha o código-fonte completo em Pascal e um ano de atualizações.

Você pode ler a referência completa das units e experimentar você mesmo na página do produto sgcCrypto.

Perguntas ou feedback? Entre em contato, você receberá uma resposta das pessoas que escreveram o código.