Github 내에 개인적인 용도로 사용하려고 만들어둔 C++ 라이브러리는
암호화 처리하는데에 있어서 CryptoPP 라이브러리를 사용 중이였다.
사실 뭐 안되는거 없이, 잘 구현된 라이브러리 이다.
그러던중 최근 들어
AES256 을 통해 파일을 암호화 전송하는 기능을 라이브러리에 추가하려 하였는데,
관련되서 자료를 찾아보니 CryptoPP 는 FIPS140 인증이 없더라.
이게 뭔가 하고 찾아보기 시작했다.
FIPS140 란 무엇인가?
Federal Information Processing Standards
직역하자면 연방 정보 처리 표준 이라는 의미로서
미국 국방부, 공기관에서 사용하기 위한 표준이다.
해당 표준은 NIST (미국 국립 표준 기술 연구소) 에서 제정한다.
FIPS 표준은 여러가지가 존재한다.
예로 FIPS 137 의 경우 '보안 전화 인코딩 표준' 이고
FIPS 153, 의 경우 '3D 그래픽 랜더링 API 표준' 이다.
우리가 알아볼 FIPS 140 은 '암호화 모듈' 표준이다.
즉,
미국 내 국방부, 공기관 내에서 사용되는 '암호화 모듈' 은
FIPS 140 인증을 받은 모듈들만 사용 가능하다고 보면 된다.
OpenSSL 3.0
해당 페이지에서 OpenSSL 3.0 이 FIPS 140-2 인증을 획득한것을 확인할 수 있다.
대충 인증 내역만 살펴봐도 인증 과정이 얼마나 빡빡할지 짐작이 간다.
주요하게 살펴보아야 할 정보는 Security Level Exceptions 이다.
Level - 3 라고 기재되어 있는데 이게 무엇일까?
FIPS140-2 Security Level 이란 무엇인가?
FIPS 140-2 의 Level 별 상세한 정보는
해당 PDF 파일에서 확인 해 볼 수 있다.
아래서 CSP 가 계속 언급될텐데
Cryptographic Service Provider 로서 그냥 암호화 작업 수행하고
일종의 Key 들을 안전하게 저장할 수 있는 모듈이라고 보면 된다.
Level 1
보안 수준 1은 평가되지 않은 운영 체제를 사용하여
범용 컴퓨팅 시스템에서 암호화 모듈의 소프트웨어 및 펌웨어 구성 요소를 실행할 수 있도록 합니다.
이러한 구현은 물리적 보안, 네트워크 보안 및 관리 절차와 같은 다른 제어가 제한되거나 존재하지 않는 경우 일부 낮은 수준의 보안 응용 프로그램에 적합할 수 있습니다. 암호화 소프트웨어의 구현은 해당 하드웨어 기반 메커니즘보다 효율적일 수 있으므로 조직은 낮은 수준의 보안 요구 사항을 충족하기 위해 대체 암호화 솔루션 중에서 선택할 수 있습니다.
Level 2
보안 수준 2는 모듈의 탈착식 커버 또는 도어에 변조 방지 코팅 또는 봉인 또는 선택 방지 잠금 장치 사용을 포함하는 변조 증거에 대한 요구 사항을 추가하여 보안 수준 1 암호화 모듈의 물리적 보안 메커니즘을 강화합니다. 변조 방지 코팅 또는 봉인은 모듈 내에서 일반 텍스트 암호화 키 및 중요 보안 매개 변수(CSP)에 물리적으로 액세스하려면 코팅 또는 봉인을 깨뜨려야 하도록 암호화 모듈에 배치됩니다. 무단 물리적 액세스로부터 보호하기 위해 덮개나 도어에 개봉 방지 봉인 또는 픽 방지 잠금 장치를 배치합니다.
보안 수준 2에는 최소한 역할 기반 인증이 필요합니다. 이 인증에서는 암호화 모듈이 특정 역할을 맡고 해당 서비스 집합을 수행할 수 있는 운영자의 권한을 인증합니다.
Level 3
보안 수준 2에서 요구되는 변조를 방지하는 물리적 보안 메커니즘 외에도
보안 수준 3은 침입자가 암호화 모듈 내에 보관된 CSP에 액세스하지 못하도록 방지합니다.
보안 수준 3에서 요구되는 물리적 보안 메커니즘은 암호화 모듈의 물리적 액세스, 사용 또는 수정 시도를 높은확률로 탐지하고 대응하도록 설계되었습니다.
물리적 보안 메커니즘에는 강력한 인클로저와 암호화 모듈의 분리 가능한 커버/도어가 열릴 때 모든 일반 텍스트 CSP를 Zero로 만드는 변조 탐지/응답 회로의 사용이 포함될 수 있습니다.
보안 수준 3에는 ID 기반 인증 메커니즘이 필요하므로 보안 수준 2에 지정된 역할 기반 인증 메커니즘에서 제공하는 보안이 향상됩니다. 암호화 모듈은 운영자의 ID를 인증하고 식별된 운영자가 다음을 가정할 권한이 있는지 확인합니다.
특정 역할을 수행하고 해당 서비스 집합을 수행합니다.
보안 수준 3에서는 일반 텍스트 CSP의 입력 또는 출력(분할 지식 절차를 사용하는 일반 텍스트 CSP의 입력 또는 출력 포함)을 다른 포트와 물리적으로 분리된 포트 또는 다른 인터페이스와 논리적으로 분리된 인터페이스를 사용하여 수행해야 합니다.
Level 4
보안 수준 4는 이 표준에 정의된 최고 수준의 보안을 제공합니다.
이 보안 수준에서 물리적 보안 메커니즘은 물리적 액세스에 대한 모든 무단 시도를 탐지하고
이에 대응할 목적으로 암호화 모듈 주위에 완벽한 보호 엔벨로프를 제공합니다.
모든 방향에서 암호화 모듈 엔클로저의 침투는 탐지될 가능성이 매우 높기 때문에
모든 일반 텍스트 CSP가 즉시 영점화(Zero)됩니다.
보안 레벨 4 암호화 모듈은 물리적으로 보호되지 않은 환경에서 작동하는 데 유용합니다.
또한 보안 수준 4는 환경 조건 또는 모듈의 정상 작동 범위를 벗어나는 변동으로 인한
보안 위협으로부터 암호화 모듈을 보호합니다.
공격자는 암호화 모듈의 방어를 방해하기 위해 정상 작동 범위를 벗어나는 의도적인 이동을 사용할 수 있습니다. 암호화 모듈은 변동을 감지하고 CSP를 제로화하도록 설계된 특수 환경 보호 기능을 포함하거나 엄격한 절차를 거쳐야 합니다.
환경 고장 테스트를 통해 모듈의 보안을 손상시킬 수 있는 방식으로 정상 작동 범위를 벗어난 변동에 의해 모듈이 영향을 받지 않는다는 것을 합리적으로 보장합니다.
간략히 정리 해 보자면...
Level 1 의 경우 > 사실 FIPS 인증을 받았다고 하기에도 좀 애매한 수준.
Level 2 의 경우 > CSP 내부 데이터가 변조되었다면 증거를 기록한뒤 대응할 수 있는 수준.
Level 3 의 경우 > CSP 내부 Access 자체를 방지하는 기능을 탑재한 수준(높은확률로 모듈 변조, 접근 탐지)
Level 4 의 경우 > 100% 확률로 모듈 변조, 접근 탐지 및 모듈의 비정상작동 완전 차단이 가능한 수준
이라고 간단히 정리할 수 있겠다.
FIPS 인증을 받은 암호화 라이브러리는 어떤것이 있나?
위키피디아 문서에서 참조한 내용이므로 정확하지 않을 수 있다.
일부 라이브러리들만 FIPS 140을 지원하는 모습을 볼 수 있다.
CryptoPP 가 FIPS140-2 인증이 없는 이유.
CryptoPP 는 이전에 FIPS 인증을 받은 이력이 있지만.
현재는 인증이 없는데
그 이유가 비용이 너무 비싸서... 라고 한다.
여담으로 CryptoPP 에서 받았던 FIPS 는 Level 1 단계 수준인데...
그렇다고 그때 당시의 CryptoPP 가 2,3,4 단계 조건에 미치지 못했다는 뜻이 아니다.
CryptoPP 측에서 1단계 비용을 지불하고 1단계 검증만 받겠다고 하면 -> 당연히 1단계 인증만 수행되는 형태
라고 생각된다.
그래서, 꼭 인증 받은 라이브러리만 써야 합니까?
'가능하면' 인증된 라이브러리를 사용하는것을 추천한다.
이유는 간단하다.
거래처나, 제 3 검증기관에서.
Q. 해당 라이브러리 소스코드 검토 해 보셧나요? 어떻게 믿을 수 있죠?
A. NIST 에서 FIPS140-2, FIPS140-3 검증을 받은 라이브러리 입니다.
그냥 한 문장으로 라이브러리에 대한 무결성을 종결지을 수 있기 때문이다.
NIST 에서 검증했는데 뭘 더 검증할 필요가 있는가?
'Miscellaneous' 카테고리의 다른 글
음수 P/E Ratio(PER) 의 의미 (0) | 2023.01.24 |
---|---|
LG U+ 알뜰폰 테더링 APN 설정 (0) | 2022.03.23 |
개발자/디자이너 컴퓨터 사양 추천. (0) | 2021.12.02 |
TV에서 USB 동영상 안나올때 (0) | 2021.10.11 |
MIUI 12.5 후기 (redmi note 7) (0) | 2021.08.19 |