Dołączony od sgcWebSockets StandardDostępny też samodzielnie
sgcCrypto — nowoczesna biblioteka kryptograficzna dla Delphi i C++ Builder
43 jednostki czysto funkcyjne w Object Pascal, bez komponentów, bez śladu w trybie projektowania: podajesz TBytes na wejściu, dostajesz TBytes na wyjściu. AES-GCM i ChaCha20-Poly1305 do szyfrowania, SHA-3/BLAKE2/Argon2 do funkcji skrótu, Ed25519/X25519/RSA do podpisów i wymiany kluczy, parsowanie i generowanie certyfikatów X.509 oraz post-kwantowe ML-KEM, ML-DSA i SLH-DSA, których klucze i certyfikaty trafiają do tych samych plików X.509, PKCS#8 i PEM co wszystko inne. Pakiet zawiera też silnik TLS 1.3 i TLS 1.2 napisany w tym samym Object Pascal, wybierany przez iohNativeTLS, z domyślnie włączoną hybrydową wymianą kluczy X25519MLKEM768. Każdy prymityw jest zaimplementowany bezpośrednio w jednostce dodawanej do sekcji uses: bez zewnętrznego DLL, bez powiązania z OpenSSL, a ten sam kod źródłowy kompiluje się bez zmian od Delphi 7 po RAD Studio 13. sgcCrypto jest dołączony bezpłatnie do sgcWebSockets Standard, Professional i Enterprise, a do tego sprzedawany samodzielnie (z dołączonym środowiskiem uruchomieniowym sgcWebSockets Core) dla klientów posiadających wyłącznie Core.
2Sposoby posiadaniaDołączony do edycji, albo samodzielnie
ZANIM KUPISZ
Trzy rzeczy warte poznania na start
Czym jest sgcCrypto, czy już go posiadasz i gdzie działa. Wszystkie trzy odpowiedzi są krótkie.
sgcCrypto to czyste funkcje, nie komponenty
Każda z 43 jednostek eksportuje zwykłe funkcje i procedury. Nie ma tu klasy Tsgc*, nic nie jest rejestrowane przez RegisterComponents, i nie ma jednostki sgcCrypto_Reg.pas. Wywołujesz sgcAES_GCM_Encrypt(aKey, aIV, aPlain, aAAD, aTag) tak samo, jak każdą funkcję RTL, z formularza, usługi, aplikacji konsolowej lub wątku.
Pełny kod źródłowy jest dołączony do każdej licencji, więc prymitywy można krokowo przechodzić we własnym debuggerze, zamiast znikać w binarce czy DLL.
Pokrywanie się edycji
Masz już edycję sgcWebSockets?
sgcCrypto jest dołączony do sgcWebSockets Standard, Professional i Enterprise, a także do All-Access, bez dodatkowych kosztów. Jeśli masz już licencję dowolnej edycji od Standard wzwyż, masz już wszystkie 43 jednostki, nie ma nic więcej do kupienia.
sgcCrypto istnieje samodzielnie dla odwrotnego przypadku: posiadasz wyłącznie sgcWebSockets Core albo nie masz żadnej licencji sgcWebSockets, a chcesz jednostki kryptograficzne bez licencjonowania pełnej edycji.
Zakres platform
sgcCrypto nie ma osłony platformowej
W odróżnieniu od pakietów AI czy mowy, nic w sgcVer.inc nie ogranicza sgcCrypto do Windows. Jednostki to zwykła arytmetyka Object Pascal, więc kompilują się dla Win32, Win64, Linux64, macOS, iOS i Android z tego samego kodu źródłowego.
Jedyna jednostka świadoma platformy, sgcCrypto_Random, wybiera backend CSPRNG odpowiedni dla celu (BCryptGenRandom w Windows albo /dev/urandom gdzie indziej) za tym samym wywołaniem sgcRandomBytes, więc Twój kod nigdy nie rozgałęzia się w zależności od platformy.
CO JEST W ZESTAWIE
43 jednostki, sześć rodzin możliwości
Każda jednostka to skompilowany Object Pascal, wywoływalny z dowolnego projektu Delphi 7 do 13 lub C++ Builder. Nie ma zewnętrznego DLL, powiązania z OpenSSL ani generatora kodu: prymitywy są zaimplementowane bezpośrednio w jednostce dodawanej do sekcji uses.
Symetryczna5 jednostek
AES, ChaCha20 i konstrukcje AEAD na ich bazie
sgcCrypto_AES obejmuje CBC, GCM i CTR; sgcCrypto_Modes dodaje ECB, OFB, CFB, ciphertext-stealing CTS, AES-CCM oraz AES Key Wrap / Key Wrap with Padding (RFC 3394 / 5649); sgcCrypto_CMAC to AES-CMAC i AES-GMAC. sgcCrypto_ChaCha implementuje ChaCha20, XChaCha20, Salsa20 i XSalsa20, a sgcCrypto_Poly1305 łączy Poly1305 z nimi w szyfry AEAD ChaCha20-Poly1305 i XChaCha20-Poly1305 z RFC 8439. AES-CCM to szyfr AEAD, który z nazwy wymieniają Zigbee, Bluetooth i zestawy szyfrów CCM w TLS, ponieważ nie potrzebuje niczego poza samym szyfrem blokowym, a CBC i ECB przyjmą dowolny wybrany schemat wypełniania, PKCS#7, ANSI X9.23, ISO 7816-4 i pozostałe, na dzień, gdy trzeba będzie odczytać to, co zapisał inny system. sgcAES_GCM_Decrypt oraz weryfikatory Poly1305 porównują znacznik uwierzytelniający w stałym czasie i odmawiają zwrócenia jawnego tekstu, gdy weryfikacja się nie powiedzie.
sgcCrypto_SHA2 i sgcCrypto_Keccak obejmują SHA-1/2, SHA-3, SHAKE, cSHAKE i KMAC; sgcCrypto_Blake2b i sgcCrypto_Blake2s dodają BLAKE2. sgcCrypto_HMAC to kluczowane uwierzytelnianie wiadomości. Do zamiany hasła na klucz: sgcCrypto_KDF (PBKDF2), sgcCrypto_HKDF, sgcCrypto_Scrypt i sgcCrypto_Argon2, który implementuje wszystkie trzy warianty Argon2 — d, i oraz id — zwycięzcę Password Hashing Competition. sgcCrypto_SipHash daje szybki kluczowany skrót do kluczy tablic mieszających, a sgcCrypto_TLSH to rozmyty skrót z funkcją odległości podobieństwa, nie skrót kryptograficzny, przydatny do wykrywania niemal identycznych plików.
Ed25519/Ed448, X25519/X448, secp256k1, Brainpool i RSA
sgcCrypto_Ed25519/Ed448 podpisują i weryfikują; sgcCrypto_X25519/X448 realizują odpowiadający im Diffie-Hellman. sgcCrypto_ECCurves dodaje ECDSA i ECDH nad siedmioma krzywymi, secp256k1, trzema krzywymi Brainpool oraz NIST P-256/P-384/P-521, z deterministycznymi noncami RFC 6979 i podpisami w postaci surowej albo DER, a do tego podpisywanie Schnorra BIP-340, z kluczami publicznymi x-only, jakich oczekują Taproot, Nostr i Lightning. sgcCrypto_EC to bliźniak zorientowany na JOSE: podpisuje i weryfikuje JWS bezpośrednio, ES256/384/512. sgcCrypto_RSA weryfikuje podpisy PKCS#1 v1.5 i PSS wprost z klucza PEM, a sgcCrypto_RSA_Keys idzie dalej, z generowaniem kluczy o dowolnej długości bitowej, szyfrowaniem OAEP i PKCS#1 v1.5 oraz eksportem DER/PEM zarówno w postaci PKCS#1, jak i PKCS#8 BEGIN PRIVATE KEY. Klucze RSA i EC importuje się równie łatwo, jak się je eksportuje, w DER albo PEM, więc raz wygenerowany klucz można zapisać i wczytać ponownie, zamiast żeby żył wyłącznie tak długo, jak proces. sgcCrypto_ECIES dopełnia zestaw hybrydowym szyfrowaniem seal/open do klucza publicznego X25519.
sgcCrypto_ASN1 czyta DER i PEM oraz parsuje klucze PKCS#1/SEC 1; sgcCrypto_DER zapisuje każdy tag potrzebny certyfikatowi lub CSR. sgcCrypto_X509 parsuje certyfikat, weryfikuje, że został podpisany przez danego wystawcę, przechodzi i weryfikuje łańcuch, weryfikuje CSR oraz parsuje CRL, aby sprawdzić unieważnienie. sgcCrypto_X509_Gen generuje od podstaw certyfikat samopodpisany lub żądanie PKCS#10 CSR, a urząd CA wystawia certyfikaty przez sgcX509_CreateSigned albo sgcX509_CreateSignedFromCSR: pełną nazwę wyróżniającą podmiotu i wystawcy, okno ważności, flagę CA z ograniczeniem długości ścieżki, flagi użycia klucza, rozszerzone OID-y użycia klucza oraz alternatywne nazwy podmiotu, wraz z SAN-ami adresów IP, które przyjmują teraz IPv6 w dowolnej postaci tekstowej z RFC 4291, i SAN-ami URI dla tożsamości usług w stylu SPIFFE.
Podpisywanie nie ogranicza się już do RSA i EC. sgcX509_MLDSAKey oraz sgcX509_SLHDSAKey opakowują klucz post-kwantowy dla sgcX509_CreateSelfSignedEx i sgcX509_CreateCSREx, więc certyfikat albo CSR można podpisać kluczem ML-DSA lub SLH-DSA. Urząd CA może również certyfikować klucz publiczny ML-KEM (RFC 9935), który nie potrafi podpisywać, więc posiadanie trzeba udowodnić w inny sposób. Po stronie odczytu TsgcX509PublicKeyType zyskał wartości x509pkMLDSA, x509pkSLHDSA i x509pkMLKEM, a sgcX509_VerifyChain egzekwuje teraz długość ścieżki z basicConstraints oraz rozszerzenie nameConstraints dla dNSName, iPAddress, rfc822Name, uniformResourceIdentifier i directoryName, zapisywane po stronie generowania przez PermittedDNSNames, ExcludedDNSNames, PermittedIPRanges i ExcludedIPRanges. Certyfikat EC nadal wychodzi w przybliżeniu na jedną trzecią rozmiaru certyfikatu RSA i weryfikuje się dużo szybciej, dlatego nowe wdrożenia po niego sięgają.
ML-KEM, ML-DSA i SLH-DSA, plus hybrydowy kombinator
sgcCrypto_MLKEM to enkapsulacja kluczy z FIPS 203, trzy zestawy parametrów (ML-KEM-512/768/1024), z niejawnym odrzuceniem przy nieprawidłowym szyfrogramie. sgcCrypto_MLDSA to podpisywanie z FIPS 204, ML-DSA-44/65/87. sgcCrypto_SLHDSA to FIPS 205, wszystkie sześć zestawów parametrów SHAKE: 128s, 128f, 192s, 192f, 256s, 256f. Ponieważ samo ML-KEM stawia wszystko na założeniu o kratach młodszym niż krzywe eliptyczne, sgcCrypto_MLKEM_Hybrid łączy sekret X25519 i sekret ML-KEM w jeden klucz współdzielony, więc wynik nigdy nie jest słabszy od klasycznej połowy — to wzorzec migracji, ku któremu zmierza cała branża.
Ta sama jednostka implementuje X-Wing (draft-connolly-cfrg-xwing-kem-10), czyli X25519 razem z ML-KEM-768 jako jeden KEM: klucz publiczny 1216 bajtów, klucz prywatny 32 bajty (ziarno), szyfrogram 1120 bajtów i sekret współdzielony 32 bajty, przez sgcXWing_GenerateKeyPair, sgcXWing_Encapsulate i sgcXWing_Decapsulate. Buduje też hybrydowe udziały klucza TLS 1.3 z RFC 10024 dla X25519MLKEM768, SecP256r1MLKEM768 i SecP384r1MLKEM1024 (punkty kodowe IANA 0x11EC, 0x11EB i 0x11ED). Te trzy nie są samodzielnymi mechanizmami KEM, budują wyłącznie udział klucza TLS.
Wszystkie trzy algorytmy odczytują i zapisują teraz klucze jako X.509 SubjectPublicKeyInfo, PKCS#8 OneAsymmetricKey oraz PEM, więc klucz post-kwantowy mieszka w tych samych plikach co klucz RSA czy EC. Klucze prywatne ML-DSA i ML-KEM mają trzy postaci, wybierane przez TsgcPQCPrivateKeyFormat: pqkfSeed zapisuje samo ziarno (32 bajty dla ML-DSA, 64-bajtowe ziarno d||z dla ML-KEM), pqkfExpanded zapisuje klucz rozwinięty, a pqkfBoth niesie obie postaci. SLH-DSA ma tylko jedną postać klucza prywatnego. sgcMLDSA_GenerateKeyPairAndSeed i sgcMLKEM_GenerateKeyPairAndSeed zwracają ziarno obok pary kluczy, więc plik w postaci ziarna można zapisać zaraz po wygenerowaniu.
Hasła jednorazowe, kodowanie i szyfrowane wpisy ZIP
sgcCrypto_OTP generuje i weryfikuje kody HOTP i TOTP, te same sześciocyfrowe kody, które pokazuje aplikacja uwierzytelniająca, z oknem weryfikacji w stałym czasie, które pochłania przesunięcie zegara. sgcCrypto_Encoding zawiera funkcje narzędziowe współdzielone przez resztę biblioteki: porównanie w stałym czasie, bezpieczne zerowanie bufora, hex, Base64url i Base32. sgcCrypto_Zip_AE2 implementuje szyfrowanie WinZip AES, AE-1 i AE-2, do szyfrowania pojedynczych wpisów ZIP. sgcCrypto_Random to wieloplatformowy CSPRNG stojący za każdym kluczem i noncem generowanym gdzie indziej w bibliotece, a sgcCrypto_Legacy utrzymuje MD4/MD5/HMAC-MD5/DES-ECB dostępne dla współpracy ze starszymi formatami, nie do nowych projektów.
Silnik TLS 1.3 i TLS 1.2 w tym samym Object Pascal
Pakiet zawiera również implementację TLS 1.3 i TLS 1.2 napisaną na prymitywach sgcCrypto. Mieszka ona w jednostkach sgcSSL_NativeTLS*, a nie w sgcCrypto_*, więc nie należy do wspomnianych 43, i dostarczana jest wszędzie tam, gdzie sgcCrypto. Wybierz ją jedną właściwością na dowolnym kliencie lub serwerze sgcWebSockets, a na żadnej platformie nie będzie niczego do wdrożenia.
// Client: no OpenSSL, no SChannel, no platform TLS stack
WSClient.TLS := True;
WSClient.TLSOptions.IOHandler := iohNativeTLS;
// Lowest version allowed: tls1_2 negotiates TLS 1.3 or TLS 1.2, tls1_3 only TLS 1.3
WSClient.TLSOptions.Version := tls1_2;
WSClient.TLSOptions.RootCertFile := 'roots.pem';
// Optional: also trust the roots the operating system already trusts
WSClient.TLSOptions.NativeTLS_Options.UseSystemRoots := True;
// Both lists are OpenSSL style, colon separated. This group list is the default.
WSClient.TLSOptions.NativeTLS_Options.Groups :=
'X25519MLKEM768:X25519:secp256r1:secp384r1';
// Only TLS 1.3 suites here means TLS 1.3 only. Leave it empty for the default,// which adds the TLS 1.2 ECDHE suites with AES-GCM and ChaCha20-Poly1305.
WSClient.TLSOptions.NativeTLS_Options.CipherSuites :=
'TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256';
// Server: the same switch on SSLOptions, IOCP and EPOLL engines included
WSServer.SSLOptions.IOHandler := iohNativeTLS;
Post-kwantowa wymiana kluczy bez konfiguracji
Domyślna lista grup zaczyna się od X25519MLKEM768, hybrydy X25519 i ML-KEM-768 z RFC 10024, więc uzgadnianie z drugim końcem, który ją obsługuje, jest już post-kwantowe bez żadnej konfiguracji. SecP256r1MLKEM768 i SecP384r1MLKEM1024 są dostępne na tej samej liście.
Nic do wdrożenia, na żadnej platformie
Bez libssl, bez libcrypto, bez SChannel i bez platformowego stosu TLS, tylko ten sam Object Pascal na Win32, Win64, Linux64, macOS, iOS i Android. Ustaw TLSOptions.IOHandler := iohNativeTLS na kliencie albo SSLOptions.IOHandler := iohNativeTLS na serwerze, wraz z silnikami serwera IOCP i EPOLL.
Korzenie, którym maszyna już ufa
Ustaw NativeTLS_Options.UseSystemRoots na True, a silnik doda systemowe zaufane korzenie do RootCertFile: magazyn ROOT w systemie Windows oraz na każdej innej platformie pierwszy plik pakietu CA znaleziony wśród standardowych lokalizacji. Nigdy nie czyta pęku kluczy macOS czy iOS ani magazynu Android. Domyślnie jest wyłączone, więc kotwice zaufania pozostają dokładnie takie, jak mówi RootCertFile. Na serwerze ta sama właściwość dotyczy weryfikowanych przez niego certyfikatów klientów.
Poznaj ograniczenia, zanim się przełączysz
Silnik obsługuje wyłącznie TLS 1.3 i TLS 1.2, bez TLS 1.1, TLS 1.0 ani SSL, a hybrydowe grupy post-kwantowe istnieją wyłącznie w TLS 1.3, więc połączenie TLS 1.2 korzysta z X25519, secp256r1 lub secp384r1. Nie ma wznawiania sesji ani PSK, nie ma 0-RTT ani QUIC. Unieważnienia i polityki certyfikatów nie są sprawdzane, a zdarzenie komponentu OnSSLVerifyPeer nie jest dla niego dostępne, silnik ma własne punkty zaczepienia weryfikacji. Jeśli potrzebujesz którejkolwiek z tych rzeczy, pozostań przy OpenSSL lub backendzie platformowym.
SZYBKI START
Bez komponentu, bez Object Inspector
Dodaj jednostkę do uses i wywołaj funkcję. Każde poniższe wywołanie pochodzi z innej z 43 jednostek, obejmując szyfrowanie symetryczne, skróty, podpisy i post-kwantowe.
Kontrole znaczników, weryfikacja HOTP/TOTP oraz sgcConstantTimeEquals porównują w stałym czasie, i tak samo przebiega praca na sekrecie. AES działa na rdzeniu bitslice, który nigdy nie indeksuje pamięci bajtem sekretu ani nie rozgałęzia się na jego podstawie, GHASH mnoży pod maską, a operacje RSA na kluczu prywatnym są zaślepiane i sprawdzane względem wykładnika publicznego, zanim cokolwiek zostanie zwrócone. Podpisywanie ECDSA, ECDH i generowanie kluczy EC używają mnożenia skalarnego w stałym czasie, a podpisywanie Ed25519 odczytuje skalar w stałych oknach, z kompletnym wzorem dodawania.
Niejawne odrzucenie i wcześniejsza kontrola danych wejściowych
Szyfrogram o prawidłowej długości, który nie daje się odszyfrować, daje pseudolosowy sekret zamiast błędu, czyli niejawne odrzucenie zgodnie z FIPS 203, więc atakujący nic się z niego nie dowiaduje. Zniekształcony klucz publiczny, szyfrogram lub klucz o niewłaściwym rozmiarze oraz klucz prywatny, który nie przechodzi kontroli skrótu, są odrzucane przed jakimkolwiek obliczeniem, a importowany klucz prywatny ML-KEM, ML-DSA lub SLH-DSA jest sprawdzany pod kątem spójności, więc klucz, którego części do siebie nie pasują, nie może zostać wczytany przez pomyłkę.
Delphi 7 do 13, bez zmian
Nie zakłada się natywnego typu 64-bitowego. sgcCrypto_Int64 i TsgcBigInt emulują arytmetykę potrzebną skrótom, krzywym i jednostkom post-kwantowym, więc ten sam kod źródłowy kompiluje się na każdej obsługiwanej wersji.
Nic nie opuszcza Twojego procesu
Każda funkcja działa w procesie na danych, które jej przekazujesz. Nie ma tu wywołania sieciowego, telemetrii ani przekaźnika eSeGeCe nigdzie w bibliotece.
CENNIK
Dołączony albo samodzielny pakiet
sgcCrypto jest dołączony bezpłatnie do sgcWebSockets Standard, Professional i Enterprise. Jeśli posiadasz wyłącznie sgcWebSockets Core, jest też sprzedawany jako osobny pakiet, od €149 dla jednego programisty. Wszystkie licencje obejmują pełny kod źródłowy, 1 rok aktualizacji oraz zniżkę na odnowienie od 50% do 70%: 50% przy odnowieniu jednego pakietu, 60% dla dwóch, 70% dla trzech lub więcej.
sgcCrypto
€149
Samodzielny pakiet. Dostępne licencje Single, Team i Site. Bezpłatny, jeśli posiadasz już sgcWebSockets Standard, Professional lub Enterprise.
Wszystkie 43 jednostki sgcCrypto_*.pas
Środowisko uruchomieniowe sgcWebSockets Core w zestawie
Delphi i C++ Builder, wszystkie sześć platform
Pełny kod źródłowy
1 rok aktualizacji
Masz już sgcWebSockets Standard, Professional lub Enterprise? sgcCrypto jest już w Twoim instalatorze, zamówienie nie jest potrzebne.
30-dniowa gwarancja zwrotu pieniędzyNie jesteś zadowolony? Poproś o pełny zwrot pieniędzy w ciągu 30 dni od zakupu. Zobacz politykę zwrotów
Kryptografia bez narzutu komponentów
43 czyste funkcje obejmujące szyfrowanie, funkcje skrótu, podpisy, PKI i post-kwantową wymianę kluczy, a do tego zbudowany na nich silnik TLS 1.3 i TLS 1.2, gotowe wszędzie tam, gdzie już działa Twój kod Delphi lub C++ Builder. Pełny kod źródłowy, bez przekaźnika, bez DLL.
Komponenty klienta OAuth2 i klienta JWT, a do tego logowanie kluczami dostępu (passkey) przez WebAuthn. Samodzielny, środowisko uruchomieniowe sgcWebSockets Core jest w zestawie.