Krypto++ | |
---|---|
Sorts | Bibliotek |
Utvecklaren | Crypto++-projekt, Wei Dai sedan 2015 |
Skrivet i | C++ |
Operativ system | Cross-platform |
Första upplagan | 1995 |
senaste versionen | |
Licens | Boost Software License (tidigare Crypto++ License ) |
Hemsida | cryptopp.com |
Crypto++ (även känt som CryptoPP , libcrypto++ och libcryptopp ) är ett gratis C++- bibliotek med öppen källkod med kryptografiska algoritmer och scheman skrivna av den kinesiska dataingenjören Wei Dai [2] . Utgiven 1995, har biblioteket fullt stöd för 32-bitars och 64-bitars arkitekturer för många större operativsystem och plattformar som Android (med STLport ), Apple (Mac OS X och iOS), BSD , Cygwin , IBM AIX och S /390, Linux , MinGW , Solaris , Windows , Windows Phone och Windows RT . Projektet stöder också kompilering med hjälp av bibliotek från olika körtider C++03, C++11 och C++17; och många andra kompilatorer och IDE:er inklusive Borland Turbo C++ , Borland C++ Builder , Clang , CodeWarrior Pro , GCC (med Apples GCC), Intel C++ Compiler (ICC) , Microsoft Visual C/C++ [3] [4] [5] .
Crypto++ tillhandahåller vanligtvis kompletta kryptografiska implementeringar. Till exempel, ISO / NESSIE / IETF godkända Camellia block chiffer , praktiskt taget liknar AES , Whirlpool hash funktion , också godkänd av ovanstående organisationer, liknande SHA ; båda ingår i detta bibliotek [6] [7] .
Det är värt att tillägga att Crypto++-biblioteket ibland gör föreslagna och nyare algoritmer tillgängliga för studier av det kryptografiska samhället. Till exempel, VMAC , den universella hash-baserade meddelandeautentiseringskoden, lades till under inlämningen till Internet Engineering Council ; Brainpool-kurvor, föreslagna som ett Internetutkast i RFC 5639 i mars 2009 , lades till Crypto++ 5.6.0 samma månad [8] [9] .
Primitiv eller Operation | Algoritmer eller implementeringar |
---|---|
Pseudo-slumptalsgeneratorer | LCG , KDF2 , Blum Blum Shub , ANSI X9.17 , Mersenne Twister , RDRAND och RDSEED |
Snabbströmningschiffer | ChaCha8/12/20 , HC-128 & HC-256 , Panama , Kanin , Salsa20 , SOSEMANUK , XSalsa20 |
AES- och AES-kandidater | Rijndael ( AES urval ), RC6 , MARS , Twofish , Serpent , CAST-256 |
Andra blockchiffer | ARIA , Blowfish , Camellia , CHAM , HIGHT, IDEA , Kalyna (128/256/512), LEA , RC5 , SEED , SHACAL-2 , Simon och Speck (64/128), SIMECK, Skipjack , SM4 , TEA , Threefish ( 256/512/1024), XTEA |
Blockera krypteringsmetoder | ECB , CBC , CTS , CFB , OFB , CTR |
Autentiserade krypteringslägen | CCM , GCM , EAX |
Blockera chifferutfyllnadsscheman | PKCS#5 , PKCS#7 , Nollor , En och nollor , W3C-utfyllnad |
Meddelandeautentiseringskoder | VMAC , HMAC , CMAC , CBC-MAC , DMAC , Two-track-MAC |
Kryptografisk hashfunktion | BLAKE2 (BLAKE2b och BLAKE2s), Keccak , SHA-1 , SHA-2 (SHA-224, SHA-256, SHA-384 och SHA-512), SHA3 , Tiger , WHIRLPOOL , RIPEMD(RIPEMD-128, RIPEMD-160 , RIPEMD-256 och RIPEMD-320) |
Lösenordskänslig KDF | PBKDF1 och PBKDF2 från PKCS #5 , PBKDF från PKCS #12 bilaga B |
Offentlig nyckelkryptering | RSA , DSA , ElGamal , Nyberg-Rueppel (NR), Rabin-Williams (RW), LUC , LUCELG , DLIES ( DHAES varianter ), ESIGN , curve25519 |
Populationsscheman för system med offentliga nyckel | PKCS#1 v2.0, OAEP , PSS , PSSR , IEEE P1363 EMSA2 och EMSA5 |
Elliptisk kurvkryptering | ECDSA , ENR , ECIES , ECDH , ECMQV |
Biblioteket gör också tillgängliga primitiver för talteoretiska operationer såsom generering och testning av primtal, finita fältaritmetik, inklusive GF(p) och GF( 2n ); operationer på polynom [4] .
I FIPS 140-2- terminologi klassificeras Crypto++-biblioteket som en fristående modul med flera chip. 32-bitars och 64-bitarsversionerna av biblioteket uppfyller alla FIPS 140-2 nivå 1 fysiska säkerhets- och operativsystemkrav. Crypto++-biblioteket innehåller endast godkända kryptografiska algoritmer. De ej godkända algoritmerna som implementerats i Crypto++-produkten ingår inte i det FIPS -validerade DLL -paketet [10] .
Alla nycklar i en modul kan antingen importeras till själva modulen eller genereras internt med hjälp av en slumptalsgenerator ( PRNG ). Modulen själv lagrar dessa nycklar endast i RAM och lagrar dem inte i permanent minne [10] .
Modulen genererar FIPS -kompatibla nycklar med hjälp av en godkänd slumptalsgenerator , i följande ordning:
CMVP tillåter följande nyckelutbytesmetoder: RSA Key Transport och Diffie-Hellman Protocol .
Crypto++ lägger inga restriktioner på längden på RSA- och DH-nycklarna, deras lämpliga längd väljs för att skydda de symmetriska nycklarna under utbytet.
Dessutom har CMVP följande minimikrav för nyckelstorlek:
Modulen lagrar eller arkiverar inte nycklar på permanent media [10] .
Under 2007, under ECRYPT- studien , analyserades arbetet i åtta kryptografiska bibliotek, Ashraf Abushareh och Chris Kai fann att "Crypto++ 5.1" leder när det gäller stöd för kryptografiska primitiver och system, men är det långsammaste av alla studerade bibliotek [4 ] .
Under 2008 visade hastighetstester utförda av Timo Bingmann med hjälp av sju säkerhetsbibliotek med öppen källkod för 15 blockchiffer att Crypto++ 5.5.2 var det mest effektiva biblioteket för två blockchiffer och var i nivå med bibliotekens genomsnittliga prestanda för resten av biblioteket. blockchiffer [11] .
Crypto++ inkluderar också en automatiserad benchmark-funktion tillgänglig från kommandoraden (cryptest.exe b), vars resultat kan ses i Crypto++ 5.6.0 Benchmarks [12] .
Liksom många andra kryptografiska bibliotek tillgängliga för 32-bitars och 64-bitars x86-arkitekturer, inkluderar Crypto++ byggrutiner för AES med AES-NI . Med AES-NI förbättras prestandan för AES avsevärt: genomströmningen av 128-bitars AES/GCM ökar från cirka 28,0 cykler per byte till 3,5 cykler per byte [13] [14] .
Crypto++ 1.0 släpptes i juni 1995. Bibliotekets arkitektur har ändrats i version 5.0 [15] [16] . Tio versioner har släppts sedan mars 2009 med 5.0 [17] arkitekturen .
Version | releasedatum |
---|---|
Krypto++ 5.6.0 | 15 mars 2009 |
Krypto++ 5.6.1 | 9 augusti 2010 |
Krypto++ 5.6.2 | 20 februari 2013 |
Krypto++ 5.6.3 | 20 november 2015 |
Krypto++ 5.6.4 | 11 september 2016 |
Krypto++ 5.6.5 | 11 oktober 2016 |
Krypto++ 6.0.0 | 22 januari 2018 |
Krypto++ 6.1.0 | 22 februari 2018 |
Krypto++ 7.0.0 | 8 april 2018 |
Krypto++ 8.0.0 | 28 december 2018 |
Krypto++ 8.1.0 | 11 februari 2019 |
Krypto++ 8.2.0 | 28 april 2019 |
En lista över alla tidigare utgåvor från Theo Lawrence av Crypto++ som går tillbaka till 1995 finns i användargruppsarkivet [18] .
Crypto++ har fått tre nivå 1-certifieringar från FIPS 140-2 [10] .
Version | Certifikat | Datum |
---|---|---|
Krypto++ 5.0.4 | Certifikat 343 [5] | 2003-09-05, 2005-10-28 |
Krypto++ 5.2.3 | Certifikat 562 [5] | 2005-07-29, 2005-08-24, 2005-10-28 |
Krypto++ 5.3.0 | Certifikat 819 [5] | 2007-08-13, 2007-08-17 |
Crypto++ lades till den historiska valideringslistan av CMVP 2016.
Från och med version 5.6.1 består Crypto++ endast av offentliga filer och en enda öppen källkodslicens för kompileringsupphovsrätt [19] .
Licensen för Crypto++ är något ovanlig bland projekt med öppen källkod. En skillnad görs mellan biblioteket som en samling (dvs samling), som är upphovsrättsskyddad av Wei Dai, och de enskilda filerna i det, som är allmän egendom . Biblioteket är upphovsrättsskyddat som en kompilering för att kunna placera vissa friskrivningar (beträffande garanti, export och patent) i licensen och för att behålla attributionerna och deklarationerna för allmän egendom intakta när Crypto++ distribueras i källkodsform. Det faktum att enskilda filer är allmän egendom innebär att du lagligt kan placera kodsegment, hela filer eller små uppsättningar filer (upp till den gräns som fastställts av tillåten användning) i ditt eget projekt och göra vad du vill med dem utan att oroa dig för upphovsrätt.
30px
Crypto++ webbplats