Crypto++ | |
---|---|
Tip de | Bibliotecă |
Dezvoltator | Proiect Crypto++, Wei Dai din 2015 |
Scris in | C++ |
Sistem de operare | Multiplatformă |
Prima editie | 1995 |
ultima versiune | |
Licență | Licență software Boost (fostă licență Crypto++ ) |
Site-ul web | cryptopp.com |
Crypto++ (cunoscut și ca CryptoPP , libcrypto++ și libcryptopp ) este o bibliotecă C++ gratuită și open source de algoritmi și scheme criptografice scrise de inginerul chinez de computer Wei Dai [2] . Lansată în 1995, biblioteca acceptă pe deplin arhitecturi pe 32 și 64 de biți pentru multe sisteme de operare și platforme majore, cum ar fi Android (folosind STLport ), Apple (Mac OS X și iOS), BSD , Cygwin , IBM AIX și S /390. , Linux , MinGW , Solaris , Windows , Windows Phone și Windows RT . Proiectul acceptă, de asemenea, compilarea folosind biblioteci din diferite runtime C++03, C++11 și C++17; și multe alte compilatoare și IDE-uri, inclusiv Borland Turbo C++ , Borland C++ Builder , Clang , CodeWarrior Pro , GCC (folosind GCC Apple), Intel C++ Compiler (ICC) , Microsoft Visual C/C++ [3] [4] [5] .
Crypto++ oferă de obicei implementări criptografice complete. De exemplu, cifrul bloc Camellia aprobat ISO / NESSIE / IETF , practic similar cu AES , funcția hash Whirlpool , aprobată și de organizațiile de mai sus, similară cu SHA ; ambele sunt incluse în această bibliotecă [6] [7] .
Merită adăugat că biblioteca Crypto++ uneori pune la dispoziție algoritmi propuși și mai noi pentru studiul comunității criptografice. De exemplu, VMAC , codul universal de autentificare a mesajelor bazat pe hash, a fost adăugat în timpul transmiterii sale către Consiliul de inginerie a internetului ; Curbele Brainpool, propuse ca proiect de Internet în RFC 5639 în martie 2009 , au fost adăugate la Crypto++ 5.6.0 în aceeași lună [8] [9] .
Primitiv sau Operațiune | Algoritmi sau implementări |
---|---|
Generatoare de numere pseudo-aleatoare | LCG , KDF2 , Blum Blum Shub , ANSI X9.17 , Mersenne Twister , RDRAND și RDSEED |
Cifre cu flux rapid | ChaCha8/12/20 , HC-128 & HC-256 , Panama , Rabbit , Salsa20 , SOSEMANUK , XSalsa20 |
Candidații AES și AES | Rijndael ( selecție AES ), RC6 , MARS , Twofish , Serpent , CAST-256 |
Alte blocuri de cifrare | ARIA , Blowfish , Camellia , CHAM , HIGHT, IDEA , Kalyna (128/256/512), LEA , RC5 , SEED , SHACAL-2 , Simon and Speck (64/128), SIMECK, Skipjack , SM4 , TEA , Threefish ( 256/512/1024), XTEA |
Blocați metodele de criptare | ECB , CBC , CTS , CFB , OFB , CTR |
Moduri de criptare autentificate | CCM , GCM , EAX |
Scheme de blocare a cifrului | PKCS#5 , PKCS#7 , zerouri , unu și zerouri , umplutură W3C |
Codurile de autentificare a mesajelor | VMAC , HMAC , CMAC , CBC-MAC , DMAC , Two-Track-MAC |
Funcția hash criptografică | BLAKE2 (BLAKE2b și BLAKE2s), Keccak , SHA-1 , SHA-2 (SHA-224, SHA-256, SHA-384 și SHA-512), SHA3 , Tiger , WHIRLPOOL , RIPEMD(RIPEMD-128, RIPEMD-160 , RIPEMD-256 și RIPEMD-320) |
KDF sensibil la parolă | PBKDF1 și PBKDF2 din PKCS #5 , PBKDF din PKCS #12 apendicele B |
Criptografia cu cheie publică | RSA , DSA , ElGamal , Nyberg-Rueppel (NR), Rabin-Williams (RW), LUC , LUCELG , DLIES ( variante DHAES ), ESIGN , curba25519 |
Scheme de populație pentru sistemele cu cheie publică | PKCS#1 v2.0, OAEP , PSS , PSSR , IEEE P1363 EMSA2 și EMSA5 |
Criptografie cu curbă eliptică | ECDSA , ECNR , ECIES , ECDH , ECMQV |
Biblioteca pune la dispoziție, de asemenea, primitive pentru operații teoretice de numere, cum ar fi generarea și testarea numerelor prime, aritmetica câmpurilor finite, inclusiv GF(p) și GF( 2n ); operații pe polinoame [4] .
În terminologia FIPS 140-2 , biblioteca Crypto++ este clasificată ca un modul independent cu mai multe cipuri. Versiunile pe 32 de biți și 64 de biți ale bibliotecii respectă toate cerințele de securitate fizică și sistemul de operare FIPS 140-2 nivel 1. Biblioteca Crypto++ conține doar algoritmi criptografici aprobați. Algoritmii neaprobați implementați în produsul Crypto++ nu sunt incluși în pachetul DLL validat FIPS [10] .
Toate cheile dintr-un modul pot fi fie importate în modul însuși, fie generate intern folosind un generator de numere aleatorii ( PRNG ). Modulul în sine stochează aceste chei doar în RAM și nu le stochează în memoria permanentă [10] .
Modulul generează chei compatibile cu FIPS folosind un generator de numere aleatoare aprobat , în următoarea ordine:
CMVP permite următoarele metode de schimb de chei: RSA Key Transport și Diffie-Hellman Protocol .
Crypto++ nu impune nicio restricție privind lungimea cheilor RSA și DH, lungimea lor adecvată este aleasă pentru a proteja cheile simetrice în timpul schimbului.
În plus, CMVP are următoarele cerințe minime privind dimensiunea cheii:
Modulul nu stochează sau arhivează cheile pe medii permanente [10] .
În 2007, în timpul studiului ECRYPT , a fost analizată munca a opt biblioteci criptografice, Ashraf Abushareh și Chris Kai au descoperit că „Crypto++ 5.1” conduce în ceea ce privește suportul pentru primitivele și schemele criptografice, dar este cea mai lentă dintre toate bibliotecile studiate [4]. ] .
În 2008, testele de viteză efectuate de Timo Bingmann folosind șapte biblioteci de securitate open source pentru 15 cifruri bloc au arătat că Crypto++ 5.5.2 a fost cea mai eficientă bibliotecă pentru două cifruri bloc și a fost la egalitate cu performanța medie a bibliotecilor pentru restul blocurilor. cifruri bloc [11] .
Crypto++ include, de asemenea, o caracteristică de benchmark automată disponibilă din linia de comandă (cryptest.exe b), ale cărei rezultate pot fi văzute în Crypto++ 5.6.0 Benchmarks [12] .
La fel ca multe alte biblioteci criptografice disponibile pentru arhitecturi x86 pe 32 de biți și 64 de biți, Crypto++ include rutine de construire pentru AES folosind AES-NI . Cu AES-NI, performanța AES este mult îmbunătățită: debitul AES/GCM pe 128 de biți crește de la aproximativ 28,0 cicluri pe octet la 3,5 cicluri pe octet [13] [14] .
Crypto++ 1.0 a fost lansat în iunie 1995. Arhitectura bibliotecii s-a schimbat în versiunea 5.0 [15] [16] . Din martie 2009 au fost lansate zece versiuni folosind arhitectura 5.0 [17] .
Versiune | data eliberarii |
---|---|
Crypto++ 5.6.0 | 15 martie 2009 |
Crypto++ 5.6.1 | 9 august 2010 |
Crypto++ 5.6.2 | 20 februarie 2013 |
Crypto++ 5.6.3 | 20 noiembrie 2015 |
Crypto++ 5.6.4 | 11 septembrie 2016 |
Crypto++ 5.6.5 | 11 octombrie 2016 |
Crypto++ 6.0.0 | 22 ianuarie 2018 |
Crypto++ 6.1.0 | 22 februarie 2018 |
Crypto++ 7.0.0 | 8 aprilie 2018 |
Crypto++ 8.0.0 | 28 decembrie 2018 |
Crypto++ 8.1.0 | 11 februarie 2019 |
Crypto++ 8.2.0 | 28 aprilie 2019 |
O listă a tuturor lansărilor anterioare de la Theo Lawrence de Crypto++ care datează din 1995 poate fi găsită în arhiva grupului de utilizatori [18] .
Crypto++ a primit trei certificări de nivel 1 de la FIPS 140-2 [10] .
Versiune | Certificat | Datele |
---|---|---|
Crypto++ 5.0.4 | Certificat 343 [5] | 2003-09-05, 2005-10-28 |
Crypto++ 5.2.3 | Certificat 562 [5] | 2005-07-29, 2005-08-24, 2005-10-28 |
Crypto++ 5.3.0 | Certificat 819 [5] | 13-08-2007, 17-08-2007 |
Crypto++ a fost adăugat la Lista de validare istorică de către CMVP în 2016.
Începând cu versiunea 5.6.1, Crypto++ constă numai din fișiere publice și o singură licență open source pentru drepturile de autor de compilare [19] .
Licența Crypto++ este oarecum neobișnuită printre proiectele open source. Se face o distincție între bibliotecă ca o compilație (adică, colecție), care este protejată prin drepturi de autor de către Wei Dai, și fișierele individuale din ea, care sunt de domeniul public . Biblioteca este protejată prin drepturi de autor ca o compilație pentru a plasa anumite declinări de răspundere (cu privire la garanție, export și brevete) în licență și pentru a păstra intacte atribuțiile și declarațiile de domeniu public atunci când Crypto++ este distribuit sub formă de cod sursă. Faptul că fișierele individuale sunt de domeniul public înseamnă că, din punct de vedere legal, puteți plasa segmente de cod, fișiere întregi sau seturi mici de fișiere (până la limita stabilită de utilizarea loială) în propriul proiect și puteți face orice doriți cu ele fără să vă faceți griji cu privire la drepturi de autor. Site web Crypto++
de 30 px