github.com/google/boringssl/blob/c37e64cba55256dff3ca4575dfcac1cfb2aa111e/crypto/fipsmodule/FIPS.md
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인증받으려는 분들께 작게나마 도움이 되길..
'개발 및 운영 > 프로그래밍' 카테고리의 다른 글
Golang: 상속 관련 참고 (0) | 2021.01.12 |
---|---|
When should AccessController.doPrivileged() be used? (0) | 2021.01.11 |
WIMCreateFile에서 FILE_SHARE_READ 적용하기 (WIMCreateFile분석) (0) | 2020.04.04 |
C++에서 Node.JS 사용하기 (node모듈아님) (0) | 2019.10.21 |
[C++11] std::bind 로 unique_ptr 넘기기 (0) | 2019.09.04 |
댓글