본문 바로가기
개발 및 운영/프로그래밍

FIPS 인증을 위한 모듈 개발 (boringssl)

by Joseph.Lee 2020. 10. 15.

github.com/google/boringssl/blob/c37e64cba55256dff3ca4575dfcac1cfb2aa111e/crypto/fipsmodule/FIPS.md

 

google/boringssl

Mirror of BoringSSL. Contribute to google/boringssl development by creating an account on GitHub.

github.com

OpenSSL의 경우 <아마도...?> static linking할 경우 FIPS 인증된 모듈을 지원하지 않으며,

shared library으로써 만들어진 파일을 주소를 고정하여 로드(ASLR 비활성화)하여 그 상태로 해시값을 자체적으로 평가(self-test) 하여 무결성을 확인한다.

 

단점은 Delayed Load할 경우 문제가 발생한다 (load전 openssl의 base address를 이미 쓰고 있다면 로드가 실패하게 된다. 이는 delayed load할 경우 해결할 수 없는 문제이다... 확률적으로 문제가 발생한다...)

 

또한 너무 오래된 OpenSSL 1.0.2 버전에 대해서만 FIPS인증받은 모듈이 존재하기 때문에 잠재적인 보안 문제의 가능성도 있다.

 

 

구글이 OpenSSL에서 Fork하여 개발한 BoringSSL이 있다. shared library & static library 모두에 대해 FIPS인증된 모듈 사용이 가능하며 <제대로 보진 않았지만> ASLR이 활성화된 상태에서도 로드가 가능한 것으로 보인다.

OpenSSL뿐만 아니라 과거 FIPS 모듈의 고질적인 문제가 해결된 것이다.

 

위 링크에 이에 대한 설명이 나와있다. 간단하게는 모듈들을 asm으로 빌드한 뒤 순서대로 merge하고 delocate(go로 작성된 코드)를 통해 locate관련 내용을 삭제한다(어케하는진.. 더 알아봐야겠다..)

 

FIPS인증받으려는 분들께 작게나마 도움이 되길..

 

반응형

댓글