Crypto++

Crypto++
개발자초기에는 웨이 다이, 2015년부터는 Crypto++ 프로젝트
발표일1995
안정화 버전
8.9 / 2023년 10월 1일(3년 전)(2023-10-01)
프로그래밍 언어C++
운영 체제크로스 플랫폼
종류보안 라이브러리
라이선스Boost (C++ 라이브러리) (이전에는 Crypto++ 라이선스) / 개별 파일은 퍼블릭 도메인
웹사이트www.cryptopp.com

Crypto++(또는 CryptoPP, libcrypto++, libcryptopp라고도 함)는 웨이 다이가 작성한 암호학 알고리즘 및 체계에 대한 자유 및 오픈 소스 C++ 클래스 라이브러리이다. Crypto++는 학계, 학생 프로젝트, 오픈 소스 및 비상업적 프로젝트뿐만 아니라 기업에서도 널리 사용되어 왔다. 1995년에 출시된 이 라이브러리는 안드로이드(표준 템플릿 라이브러리 사용), 애플(macOS 및 iOS), BSD, 시그윈, IBM AIX, 리눅스, MinGW, 솔라리스, 윈도우, 윈도우 폰 및 윈도우 RT를 포함한 많은 주요 운영 체제 및 플랫폼에 대해 32비트 및 64비트 아키텍처를 완전히 지원한다. 또한 이 프로젝트는 C++03, C++11, C++14, C++17 런타임 라이브러리를 사용한 컴파일을 지원하며, 볼랜드 터보 C++, 볼랜드 C++ 빌더, 클랭, 코드워리어, GCC(애플의 GCC 포함), 인텔 C++ 컴파일러, 마이크로소프트 비주얼 C/C++, 썬 스튜디오 등 다양한 컴파일러 및 IDE를 지원한다.

Crypto++ 1.0은 1995년 6월에 출시되었으나, 더 이상 다운로드할 수 없다. Crypto++ 1.0 릴리스는 RSA 데이터 시큐리티가 RSA 알고리즘에 대한 특허를 주장함에 따라 철회되었다. 라이브러리의 다른 모든 버전은 다운로드할 수 있다.

알고리즘

Crypto++는 일반적으로 완전한 암호화 구현을 제공하며, 종종 덜 대중적이거나 덜 자주 사용되는 체계를 포함한다. 예를 들어, 카멜리아는 국제 표준화 기구/NESSIE/국제 인터넷 표준화 기구 승인을 받은 블록 암호로 AES와 거의 동등하며, 월풀은 국제 표준화 기구/NESSIE/국제 인터넷 표준화 기구 승인을 받은 해시 함수로 SHA와 거의 동등하다. 이 두 가지 모두 라이브러리에 포함되어 있다. 또한 Crypto++ 라이브러리는 때때로 암호화 커뮤니티의 연구를 위해 제안되거나 최첨단 상태인 알고리즘과 구현을 제공한다. 예를 들어, 보편적인 해시 기반 메시지 인증 코드인 VMAC은 인터넷 엔지니어링 태스크 포스(CFRG 워킹 그룹)에 제출되는 동안 라이브러리에 추가되었으며, 2009년 3월 RFC 5639에서 인터넷 드래프트로 제안된 브레인풀 곡선(Brainpool curves)도 같은 달에 Crypto++ 5.6.0에 추가되었다.

Crypto++ 알고리즘 및 구현
기본 요소 또는 작업알고리즘 또는 구현
유사난수 생성기 LCG, KDF2, 블럼 블럼 셥, ANSI X9.17, 메르센 트위스터, RDRAND 및 RDSEED
고속 스트림 암호 ChaCha8/12/20, ChaCha20 (IETF 버전), HC-128 및 HC-256, 파나마, 래빗, Salsa20, SOSEMANUK, Salsa20
AES 및 AES 후보 Rijndael (AES 선정), RC6, MARS, 투피시, 서펜트, CAST-256
기타 블록 암호 ARIA, 블로피시, 카멜리아, CHAM, HIGHT, IDEA, Kalyna (128/256/512), LEA, RC5, 트리플 DES (2키 및 3키), SEED, SHACAL-2, 사이먼 (64/128), 스펙 (64/128), SIMECK, 스키프잭, SM4, TEA, 스리피시 (256/512/1024), XTEA
블록 암호 운용 방식 ECB, CBC, CTS, CFB, OFB, CTR, XTS
인증된 암호화 모드 CCM, GCM, EAX, ChaCha20Poly1305
블록 암호 패딩 방식 PKCS#5, PKCS#7, 영 패딩, 비트 패딩, W3C 패딩
메시지 인증 코드 VMAC, HMAC, CMAC, CBC-MAC, DMAC, 투트랙 MAC
암호화 해시 함수 BLAKE2 (BLAKE2b 및 BLAKE2s), SHA-3, SHA-1, SHA-2 (SHA-224/256/384/512), SHA-3, LSH (256/512), 타이거, 월풀, RIPEMD (128/160/256/320)
비밀번호 기반 키 유도 함수 PKCS #5의 PBKDF2 및 PBKDF2, PKCS #12 부록 B의 PBKDF, Krawczyk 및 Eronen의 HKDF
공개 키 암호 방식 RSA, DSA, 엘가말, Nyberg-Rueppel(러시아어판) (NR), RW, LUC, LUCELG, DLIES (DHAES의 변형), ESIGN, Curve25519
공개 키 시스템용 패딩 방식 PKCS#1 v2.0, OAEP, PSS, 이란 소비에트 사회주의 공화국, IEEE P1363 EMSA2 및 EMSA5
키 합의 방식 디피-헬먼 (DH), Unified Diffie–Hellman (DH2), MQV, Hashed MQV (HMQV), Fully Hashed MQV (FHMQV), LUCDIF, XTR-DH, x25519
타원곡선 암호 타원곡선 DSA, ECNR, ECIES, 타원곡선 디피-헬먼, ECMQV, 에드워즈 곡선 디지털 서명 알고리즘
비밀 공유 샤미르의 비밀 공유, 래빈의 정보 분산 알고리즘 (IDA)

또한 이 라이브러리는 고속 다정밀도 정수, 소수 생성 및 검증, GF(p) 및 GF(2n)를 포함한 유한체 연산, 타원 곡선, 다항식 연산과 같은 수론 연산을 위한 기본 요소를 제공한다.

또한 이 라이브러리는 하위 호환성 및 역사적 가치를 위해 안전하지 않거나 구식이 된 알고리즘 모음(MD2, MD4, MD5, Panama Hash, DES, ARC4, SEAL 3.0, WAKE, WAKE-OFB, DESX (DES-XEX3), RC2, SAFER, 3-WAY, GOST, SHARK, CAST-128, Square)을 유지하고 있다.

성능

8개 라이브러리의 공개 키 구현에 초점을 맞춘 2007년 ECRYPT 워크숍 논문에서 아슈라프 아부샤레크(Ashraf Abusharekh)와 크리스 카즈(Kris Kaj)는 "Crypto++ 5.1은 암호화 기본 요소와 체계 지원 측면에서는 앞서지만, 조사된 모든 라이브러리 중 가장 느리다"고 밝혔다.

2008년 티모 빙만(Timo Bingmann)이 15개의 블록 암호를 사용하여 7개의 오픈 소스 보안 라이브러리를 대상으로 수행한 속도 테스트에서, Crypto++ 5.5.2는 2개의 블록 암호 환경에서 최고 성능을 보였으며 나머지 블록 암호 환경에서도 평균 이하의 성능을 보이지 않았다.

Crypto++는 명령줄(cryptest.exe b)에서 사용할 수 있는 자동 벤치마킹 기능을 포함하고 있으며, 그 결과는 Crypto++ 5.6.0 벤치마크에서 확인할 수 있다.

32비트 및 64비트 x86 아키텍처용으로 제공되는 다른 많은 암호화 라이브러리와 마찬가지로, Crypto++는 AES-NI를 사용하는 AES용 어셈블리 루틴을 포함한다. AES-NI를 사용하면 AES 성능이 획기적으로 향상된다. 128비트 AES-GCM 처리량은 바이트당 약 28.0 사이클에서 3.5 사이클로 증가한다.

버전 릴리스

Crypto++ 1.0은 1995년 6월에 출시되었다. 초기 릴리스 이후 라이브러리는 버전 5.0의 아키텍처 변경을 포함하여 거의 20여 차례 개정되었다. 2009년 3월 이후 버전 5.0 아키텍처를 사용하는 릴리스는 10번 있었다.

버전 6.0 이후의 Crypto++ 릴리스
버전출시 날짜
Crypto++ 6.0.0 2018년 1월 22일
Crypto++ 6.1.0 2018년 2월 22일
Crypto++ 7.0.0 2018년 4월 8일
Crypto++ 8.0.0 2018년 12월 28일
Crypto++ 8.1.0 2019년 2월 11일
Crypto++ 8.2.0 2019년 4월 28일
Crypto++ 8.3.0 2020년 12월 20일
Crypto++ 8.4.0 2021년 1월 2일
Crypto++ 8.5.0 2021년 3월 7일
Crypto++ 8.6.0 2021년 9월 24일
Crypto++ 8.7.0 2022년 8월 7일
Crypto++ 8.8.0 2023년 6월 25일
Crypto++ 8.9.0 2023년 10월 1일

로런스 테오(Lawrence Teo)가 정리한 1995년부터의 이전 Crypto++ 릴리스 기록은 사용자 그룹 아카이브에서 찾을 수 있다.

FIPS 검증

Crypto++는 검증 후 문제 없이 세 번의 연방 정보 처리 표준 (FIPS) 140-2 레벨 1 모듈 검증을 받았다.

FIPS 검증된 Crypto++ 모듈
버전인증서날짜
Crypto++ 5.0.4인증서 3432003-09-05, 2005-10-28
Crypto++ 5.2.3인증서 5622005-07-29, 2005-08-24, 2005-10-28
Crypto++ 5.3.0인증서 8192007-08-13, 2007-08-17

Crypto++는 2016년에 CMVP의 과거 검증 목록으로 이동되었다. 이 이동은 사실상 해당 라이브러리가 더 이상 검증되지 않음을 의미한다.

라이선스

버전 5.6.1부터 Crypto++는 퍼블릭 도메인 파일로만 구성되어 있으며, 컴파일 저작권과 해당 저작권에 대한 단일 오픈 소스 라이선스를 가진다:

“ Crypto++의 라이선스는 오픈 소스 프로젝트 중에서 다소 독특하다. 컴파일(즉, 모음)로서의 라이브러리와 그 안의 개별 파일 사이에는 차이가 있는데, 전자는 웨이 다이의 저작물이고 후자는 퍼블릭 도메인이다.

라이브러리는 라이선스 내에 특정 고지 사항(보증, 수출 및 특허 관련)을 포함하고 소스 코드 형태로 배포될 때 기여 표시 및 퍼블릭 도메인 선언을 온전하게 유지하기 위해 컴파일로서 저작권이 보호된다. 개별 파일이 퍼블릭 도메인이라는 것은 법적으로 코드 세그먼트, 전체 파일 또는 소규모 파일 세트(공정 사용 한도 내)를 자신의 프로젝트에 넣고 저작권 걱정 없이 무엇이든 할 수 있음을 의미한다.

”
 
— 30px

같이 보기

각주

  1. ↑
  2. ↑ “Crypto++ Downloads”. Crypto++ Project. June 1995. 2020년 12월 20일에 확인함.
  3. ↑ “Japan's First 128-bit Block Cipher 'Camellia' Approved as a New Standard Encryption Algorithm in the Internet”. 《physorg.com》. 2022년 5월 23일에 확인함.
  4. ↑ “Hindu Wire”. 2025년 5월 15일에 확인함.
  5. ↑ Lochter, M.; Merkle, J. (2009). Elliptic Curve Cryptography (ECC) Brainpool Standard Curves and Curve Generation. IETF. doi:10.17487/RFC5639. RFC 5639. https://tools.ietf.org/html/rfc5639. Retrieved 2022-05-23.
  6. ↑ “Crypto++ Library 8.6”. 《Crypto++ Website》. 2022년 5월 22일에 원본 문서에서 보존된 문서. 2022년 5월 23일에 확인함.
  7. ↑ A. Abusharekh; K. Kaj (2007). 《Comparative Analysis of Software Libraries for Public Key Cryptography》 (PDF). ECRYPT Workshop on Software Performance Enhancement for Encryption and Decryption. 3–19쪽. 2012년 2월 27일에 원본 문서 (PDF)에서 보존된 문서. 2010년 8월 12일에 확인함.
  8. ↑ T. Bingmann (2008). “Speedtest and Comparison of Open-Source Cryptography Libraries and Compiler Flags”. 《Timo Bingmann Weblog》. 2010년 8월 10일에 확인함.
  9. ↑ “Crypto++ 5.6.0 Benchmarks”. 《Crypto++ Website》. 2009. 2008년 10월 15일에 원본 문서에서 보존된 문서. 2010년 8월 10일에 확인함.
  10. ↑ P. Schmid; A. Roos (2010). “AES-NI Performance Analyzed”. Tom's Hardware. 2010년 8월 10일에 확인함.
  11. ↑ T. Krovetz; W. Dai (2010). “Misdetection of MIPS endianness & How to get fast AES calls?”. 《Crypto++ user group》. 2010년 8월 11일에 확인함.
  12. ↑ “Crypto++ 5.6.0 Pentium 4 Benchmarks”. 《Crypto++ Website》. 2009. 2010년 9월 19일에 원본 문서에서 보존된 문서. 2010년 8월 10일에 확인함.
  13. ↑ Announcement (2002). “Crypto++ 5.0 beta available”. 《Crypto++ Mailing List》. 2010년 8월 9일에 확인함.
  14. ↑ Announcement (2002). “Crypto++ 5.0 update”. 《Crypto++ Mailing List》. 2010년 8월 9일에 확인함.
  15. ↑ “Crypto++ Announcements List”. Sourceforge.net. 2010년 8월 14일에 확인함.
  16. ↑ L. Teo (2002). “Release Dates of Previous Versions”. 《Crypto++ Mailing List》. 2010년 8월 9일에 확인함.
  17. ↑ “Crypto++ Library Versions 5.3.0 [32-bit and 64-bit] Security Policy” (PDF). 《Cryptographic Module Validation Program (CMVP)》. 2007. 2010년 8월 8일에 확인함.
  18. ↑ “Validated FIPS 140-1 and FIPS 140-2 Cryptographic Modules (2003)”. 《Cryptographic Module Validation Program (CMVP)》. 2003. 2010년 8월 8일에 확인함.
  19. ↑ “Validated FIPS 140-1 and FIPS 140-2 Cryptographic Modules (2005)”. 《Cryptographic Module Validation Program (CMVP)》. 2005. 2010년 8월 8일에 확인함.
  20. ↑ “Validated FIPS 140-1 and FIPS 140-2 Cryptographic Modules (2007)”. 《Cryptographic Module Validation Program (CMVP)》. 2007. 2010년 8월 8일에 확인함.
  21. ↑ “Compilation Copyright for Crypto++”. 《Crypto++ Website》. 2010년 8월 15일에 확인함.

외부 링크