Krypto++

Den aktuella versionen av sidan har ännu inte granskats av erfarna bidragsgivare och kan skilja sig väsentligt från versionen som granskades den 20 december 2019; verifiering kräver 31 redigeringar .
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] .

Algoritmer

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

Crypto++ algoritmer och deras implementeringar
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] .

Kryptografisk nyckelhantering

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

Nyckelgenerering [10]

Modulen genererar FIPS -kompatibla nycklar med hjälp av en godkänd slumptalsgenerator , i följande ordning:

Nyckelutbyte [10]

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:

Nyckellagring

Modulen lagrar eller arkiverar inte nycklar på permanent media [10] .

Prestanda

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

Versionssläpp

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 .

Crypto++ släpps sedan version 5.6
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] .

FIPS-ratifikationer

Crypto++ har fått tre nivå 1-certifieringar från FIPS 140-2 [10] .

Crypto++-moduler ratificerade av FIPS
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.

Licens

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

Se även

Anteckningar

  1. https://cryptopp.com/release870.html
  2. J. Kelsey, B. Schneier, D. Wagner, C. Hall. Kryptanalytiska attacker på pseudoslumptalsgeneratorer  // Snabb mjukvarukryptering, 5:e internationella förfarandet. - 1998. - S. 8 . Arkiverad från originalet den 30 december 2014.
  3. Yinglian Xie David O'Hallaron Michael K. Reiter. Skydd av integritet i nyckel-värdesökningssystem  // 2006 22:a årliga konferensen om datorsäkerhetsapplikationer (ACSAC'06): Konferens. - Miami Beach, FL, USA, 2006. - S. 17 . — ISBN 0-7695-2716-7 . — ISSN 1063-9527 . - doi : 10.1109/ACSAC.2006.43 . Arkiverad från originalet den 17 juni 2019.
  4. ↑ 1 2 3 Ashraf Abusharekh Kris Gaj. JÄMFÖRANDE ANALYS AV PROGRAMVARUBIBLIOTEK FÖR OFFENTLIG NYCKELKRYPTOGRAFI (ej tillgänglig länk) S.10,11,15,29. Institutionen för el- och datateknik George Mason University (2007). Hämtad 24 december 2019. Arkiverad från originalet 24 december 2019. 
  5. ↑ 1 2 3 4 Jeffrey Walton. Crypto++: Tidigare valideringar och framtida anvisningar P.4,5,7 (2017). Hämtad 24 december 2019. Arkiverad från originalet 24 december 2019.
  6. Arsi Hartikainen. Whirlpool hashing funktion S. 16. Villmanstrands tekniska högskola (2005). Hämtad 4 februari 2020. Arkiverad från originalet 4 februari 2020.
  7. Japans första 128-bitars blockchiffer 'Camellia' godkänd som en ny standardkrypteringsalgoritm på Internet , PHYS.ORG  (20 juli 2005). Arkiverad från originalet den 19 december 2019. Hämtad 5 februari 2020.
  8. M. Lochter. Elliptic Curve Cryptography (ECC) Brainpool Standard  //  IETF : RFC. - 2010. - P. 4 . — ISSN 2070-1721 . Arkiverad från originalet den 15 februari 2020.
  9. Crypto++ 5.6.0 Release Notes . Crypto++ webbplats . Hämtad 8 augusti 2010. Arkiverad från originalet 24 februari 2021.
  10. ↑ 1 2 3 4 5 6 Wei Dai. SÄKERHETSPOLICY . Krypto++ P. 2,9,10. NIST (2007-8-7). Hämtad 1 februari 2020. Arkiverad från originalet 19 december 2019.
  11. Timo Bingmann. Hastighetstest och jämförelse av kryptografibibliotek med öppen källkod och kompilatorflaggor  // Panthema.net. - 2008. - S. 1 . Arkiverad från originalet den 22 januari 2020.
  12. Crypto++ 5.6.0 Benchmarks . Crypto++ webbplats (2009). Hämtad 10 augusti 2010. Arkiverad från originalet 15 oktober 2008.
  13. Felupptäckt av MIPS endianness & Hur får man snabba AES-samtal? . Användargrupp Crypto++ (2010). Hämtad 11 augusti 2010. Arkiverad från originalet 9 november 2012.
  14. Crypto++ 5.6.0 Pentium 4-riktmärken . Crypto++ webbplats (2002). Hämtad 10 augusti 2010. Arkiverad från originalet 19 september 2010.
  15. Meddelande. Crypto++ 5.0 beta tillgänglig (2002) . Crypto++ e-postlista . Hämtad 9 augusti 2010. Arkiverad från originalet 9 november 2012.
  16. Meddelande. Crypto++ 5.0-uppdatering . Crypto++ Mailing List (2002). Hämtad 9 augusti 2010. Arkiverad från originalet 9 november 2012.
  17. Crypto++ meddelandelista (2010) . sourceforge.net. Hämtad 14 augusti 2010. Arkiverad från originalet 23 juni 2011.
  18. L. Theo. Utgivningsdatum för tidigare versioner . Crypto++ Mailing List (2002). Hämtad 9 augusti 2010. Arkiverad från originalet 9 november 2012.
  19. Sammanställning Copyright för Crypto++(2003) . Crypto++ webbplats . Hämtad 15 augusti 2010. Arkiverad från originalet 26 juli 2010.

Länkar

Litteratur