| 개발자 | Legion of the Bouncy Castle Inc. |
|---|---|
| 프로그래밍 언어 | C# 및 자바 |
| 플랫폼 | 닷넷 프레임워크 및 Java SE |
| 종류 | 암호학 API |
| 라이선스 | MIT 허가서 |
바운시 캐슬(Bouncy Castle)은 컴퓨터 프로그램에서 암호학을 구현하기 위해 사용되는 API 모음이다. 이 모음은 자바 및 C# 프로그래밍 언어용 API를 모두 포함하고 있다. 이 API들은 오스트레일리아에 등록된 자선 단체인 Legion of the Bouncy Castle Inc.에서 지원한다.
바운시 캐슬은 오스트레일리아에서 시작되었으므로, 미국의 미국에서의 암호화 기술 수출 제한 규정이 적용되지 않는다.
바운시 캐슬은 두 동료가 서버 측 Java SE 환경에서 작업할 때마다 암호화 라이브러리 세트를 반복해서 만들어야 하는 것에 지치면서 시작되었다. 개발자 중 한 명은 취미로 자바 플랫폼, 마이크로 에디션(당시 J2ME) 개발에 활발히 참여하고 있었고, 설계 고려 사항 중 하나는 J2ME를 포함하여 가능한 한 가장 넓은 범위의 자바 가상 머신(JVM)을 라이브러리에 포함하는 것이었다. 이러한 설계 고려 사항이 바운시 캐슬의 현재 아키텍처로 이어졌다.
2000년 5월에 설립된 이 프로젝트는 원래 자바로만 작성되었으나, 2004년에 C# API가 추가되었다. 초기 자바 API는 테스트 코드를 포함하여 약 27,000줄의 코드로 구성되었으며, J2ME, JCE/JCA 제공자, 기본적인 X.509 인증서 생성 기능을 지원했다. 이에 비해 1.53 릴리스는 테스트 코드를 포함하여 390,640줄의 코드로 구성되어 있다. 이는 초기 릴리스와 동일한 기능을 지원하면서 더 많은 수의 알고리즘과 더불어 PKCS#10, PKCS#12, CMS, S/MIME, OpenPGP, DTLS, TLS, OCSP, TSP, CMP, CRMF, DVCS, DANE, EST 및 속성 인증서를 지원한다. C# API는 약 145,000줄의 코드이며 자바 API가 제공하는 대부분의 기능을 지원한다.
이 프로젝트의 주요 특징은 다음과 같다.
2013년 10월 18일, 프로젝트의 소유권을 확보하고 API의 지속적인 개발을 지원하기 위해 핵심 개발자들과 기타 인원들에 의해 오스트레일리아 빅토리아주에 비영리 단체인 Legion of the Bouncy Castle Inc.가 설립되었다. 이 단체는 2013년 11월 7일 오스트레일리아 자선 및 비영리 위원회로부터 교육 발전 및 지역 사회에 이익이 되는 목적을 가진 오스트레일리아 자선 단체로 인정받았다. 이 단체는 2013년 11월 29일 컨슈머 어페어스 빅토리아로부터 목적을 지원하기 위한 모금 활동을 허가받았다.
바운시 캐슬 아키텍처는 기본 암호화 기능을 지원하는 두 가지 주요 구성 요소로 이루어져 있다. 이는 '경량(light-weight)' API와 자바 암호화 확장(JCE) 제공자로 알려져 있다. JCE 제공자를 기반으로 구축된 추가 구성 요소는 PGP 지원, S/MIME 등 추가 기능을 지원한다.
저수준 또는 '경량' API는 모든 기본 암호화 알고리즘을 구현하는 API 세트이다. 이 API들은 필요할 때 사용하기 쉽도록 설계되었지만, JCE 제공자를 위한 기본 빌딩 블록을 제공한다. 이 저수준 API는 메모리가 제한된 장치(JavaME)나 JCE 라이브러리에 쉽게 접근할 수 없는 경우(예: 애플릿 배포)에 사용하도록 의도되었다. 경량 API는 단순한 자바 코드이므로 자바 가상 머신(JVM)은 코드 작동에 어떠한 제한도 가하지 않으며, 바운시 캐슬 역사 초기에는 JCE 제공자가 "강력한" 암호화를 수행하지 못하도록 막았던 관할권 정책 파일에 의해 제약받지 않는 강력한 암호화를 개발하는 유일한 방법이었다.
JCE 호환 제공자는 저수준 API를 기반으로 구축된다. 따라서 JCE 제공자의 소스 코드는 저수준 API를 사용하여 많은 "공통" 암호화 문제를 구현하는 방법을 보여주는 예시가 된다. 많은 프로젝트가 오픈 소스 인증 기관인 EJBCA를 포함하여 JCE 제공자를 사용하여 구축되었다.
C# 및 자바 릴리스는 FIPS 140-2 레벨 1 및 FIPS 140-3 레벨 1 인증 스트림도 가지고 있다. 일반 릴리스와 다른 점은, 모듈이 일반 릴리스와 유사하게 설계되었지만 저수준 API가 상당히 다르다는 점인데, 이는 주로 알고리즘이 사용될 때 FIPS가 요구하는 제어 수단을 강제하기 위함이다. 자바 API의 JCE 레벨의 경우, 이 제공자는 여전히 일반 릴리스를 대체하는 드롭인 교체용으로 주로 사용된다. 첫 FIPS 인증 릴리스는 2016년 11월에 처음 제공되었으며, 최신 자바 버전은 인증 번호 4743을, 최신 C# 버전은 인증 번호 4416을 부여받았다.
2014년 초 기준 안드로이드 운영체제는 바운시 캐슬의 맞춤형 버전을 포함하고 있다. 클래스 이름 충돌로 인해 안드로이드 애플리케이션은 공식 바운시 캐슬 릴리스를 그대로 포함하거나 사용할 수 없다. Spongy Castle이라는 제3자 프로젝트는 이 문제를 해결하기 위해 라이브러리의 이름을 변경한 버전을 배포한다.
당초 Spongy Castle의 FIPS 140-2 버전도 가능할 것으로 예상되었다. 그러나 안드로이드의 DEX 파일 처리 방식으로 인해 FIPS 목적상 제공자는 애플리케이션과 별도로 장치에 설치되어야 한다는 점이 밝혀졌다. 현재 안드로이드용 FIPS 140-2 릴리스는 Stripy Castle로 불리며 org.stripycastle 아래에 패키징되어 있다. 이는 안드로이드 버전의 바운시 캐슬과의 충돌을 방지함과 동시에, Spongy Castle을 사용하면서 FIPS 140-2 인증 서비스가 필요 없는 애플리케이션들과의 충돌을 피하기 위해 필요했다.