Crypto++

Versiunea actuală a paginii nu a fost încă examinată de colaboratori experimentați și poate diferi semnificativ de versiunea revizuită pe 20 decembrie 2019; verificarea necesită 31 de modificări .
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] .

Algoritmi

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] .

Algoritmi Crypto++ și implementările lor
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] .

Managementul cheilor criptografice

Î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] .

Generare cheie [10]

Modulul generează chei compatibile cu FIPS folosind un generator de numere aleatoare aprobat , în următoarea ordine:

Schimb de chei [10]

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:

Stocarea cheilor

Modulul nu stochează sau arhivează cheile pe medii permanente [10] .

Performanță

Î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] .

Lansări de versiuni

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] .

Crypto++ lansează începând cu versiunea 5.6
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] .

Ratificări FIPS

Crypto++ a primit trei certificări de nivel 1 de la FIPS 140-2 [10] .

Module Crypto++ ratificate de FIPS
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.

Licență

Î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

Vezi și

Note

  1. https://cryptopp.com/release870.html
  2. J. Kelsey, B. Schneier, D. Wagner, C. Hall. Atacurile criptoanalitice asupra generatoarelor de numere pseudo-random  // Criptare rapidă a software-ului, a 5-a procedură internațională. - 1998. - S. 8 . Arhivat din original la 30 decembrie 2014.
  3. Yinglian Xie David O'Hallaron Michael K. Reiter. Protejarea confidențialității în sistemele de căutare cheie-valoare  // 2006 A 22-a Conferință anuală privind aplicațiile de securitate informatică (ACSAC'06): Conferință. - Miami Beach, FL, SUA, 2006. - P. 17 . — ISBN 0-7695-2716-7 . — ISSN 1063-9527 . - doi : 10.1109/ACSAC.2006.43 . Arhivat din original pe 17 iunie 2019.
  4. ↑ 1 2 3 Ashraf Abusharekh Kris Gaj. ANALIZA COMPARATĂ A BIOTECRILOR DE SOFTWARE PENTRU CRIPTOGRAFIA CHEEI PUBLICE (link indisponibil) P.10,11,15,29. Departamentul de Inginerie Electrică și Calculatoare Universitatea George Mason (2007). Preluat la 24 decembrie 2019. Arhivat din original la 24 decembrie 2019. 
  5. ↑ 1 2 3 4 Jeffrey Walton. Crypto++: validări trecute și direcții viitoare P.4,5,7 (2017). Preluat la 24 decembrie 2019. Arhivat din original la 24 decembrie 2019.
  6. Arsi Hartikainen. Funcția de hashing Whirlpool P. 16. Universitatea de Tehnologie Lappeenranta (2005). Extras 4 februarie 2020. Arhivat din original pe 4 februarie 2020.
  7. Primul cifr pe bloc de 128 de biți din Japonia „Camellia” aprobat ca un nou algoritm standard de criptare pe internet , PHYS.ORG  (20 iulie 2005). Arhivat din original pe 19 decembrie 2019. Preluat la 5 februarie 2020.
  8. M. Lochter. Criptografie cu curbă eliptică (ECC) Brainpool Standard  //  IETF: RFC. - 2010. - P. 4 . — ISSN 2070-1721 . Arhivat din original pe 15 februarie 2020.
  9. Note de lansare Crypto++ 5.6.0 . Site-ul Crypto++ . Preluat la 8 august 2010. Arhivat din original la 24 februarie 2021.
  10. ↑ 1 2 3 4 5 6 Wei Dai. POLITICA DE SECURITATE . Crypto++ P. 2,9,10. NIST (2007-8-7). Preluat la 1 februarie 2020. Arhivat din original la 19 decembrie 2019.
  11. Timo Bingmann. Speedtest și compararea bibliotecilor de criptografie open-source și a semnalizatoarelor compilatorului  // Panthema.net. - 2008. - S. 1 . Arhivat din original pe 22 ianuarie 2020.
  12. Benchmarkuri Crypto++ 5.6.0 . Site-ul web Crypto++ (2009). Consultat la 10 august 2010. Arhivat din original la 15 octombrie 2008.
  13. Detectarea greșită a MIPS endianness și Cum să obțineți apeluri AES rapide? . Grup de utilizatori Crypto++ (2010). Preluat la 11 august 2010. Arhivat din original la 9 noiembrie 2012.
  14. Crypto++ 5.6.0 Pentium 4 Benchmarks . Site-ul web Crypto++ (2002). Preluat la 10 august 2010. Arhivat din original la 19 septembrie 2010.
  15. Anunț. Crypto++ 5.0 beta disponibil (2002) . Lista de corespondență Crypto++ . Preluat la 9 august 2010. Arhivat din original la 9 noiembrie 2012.
  16. Anunț. Actualizare Crypto++ 5.0 . Lista de corespondență Crypto++ (2002). Preluat la 9 august 2010. Arhivat din original la 9 noiembrie 2012.
  17. Lista de anunțuri Crypto++ (2010) . sourceforge.net. Preluat la 14 august 2010. Arhivat din original la 23 iunie 2011.
  18. L. Theo. Datele de lansare ale versiunilor anterioare . Lista de corespondență Crypto++ (2002). Preluat la 9 august 2010. Arhivat din original la 9 noiembrie 2012.
  19. Compilation Copyright for Crypto++(2003) . Site-ul Crypto++ . Preluat la 15 august 2010. Arhivat din original la 26 iulie 2010.

Link -uri

Literatură