성공할 사용한 본체랑 TLS 라이브러리의 종류및 버전, 특별하게 소스 수정하거나 컴파일 옵션 줘야한다면 해당 부분을 좀 알려주세요
Chrome Stable도 X25519Kyber768Draft00를 지원하는것보고 현제 운영중인 서버에 추가해볼려니 몇시간 컴파일 다 실패하고 있습니다 (다른 방식은 아직 지원 안되고, Kyber Hybrid만 지원됩니다)
Chrome://flags에서 수정후 재실행하고, 이미 도입된 서버에 접속해보면 개발자 도구 Security에 제대로 적용되었다고 뜹니다
Wold, Libre, Boring은 물른이고, 심지어는 OpenSSL의 패치 버전인 https://github.com/open-quantum-safe/openssl 조차 컴파일 실패하네요
사용한 NGINX의 버전은 Mainline인 1.25.2입니다
보안을 위해 매번 소스 수동으로 패치(작동에는 영향 안 주는 문자열 수정)하고, 모듈까지 추가해서 컴파일해서 쓰다보니 유포되는 바이너리로는 해당이 없어서 직접 컴파일해야 합니다
OpenSSL처럼 위장하기 위해 심벌릭 링크및 파일 복사하거나, 아에 Make파일을 수정하거나, 컴파일러 옵션으로 라이브러리 경로 지정하거나 해봐도 또 다른 에러에 시달릴뿐이네요
심지어는 Docker 생성할때 쓰는 파일을 참조해서 동일한 방식으로 진행해봐도 에러 나네요
목표는 호환성 문제를 피하기 위해 시스템의 TLS 라이브러리는 손되지 않고, NGINX의 바이너리에 Kyber를 지원하는 TLS 라이브러리를 하드코딩해서 작동시키는겁니다
추신 1 :
https://test.openquantumsafe.org
https://github.com/open-quantum-safe/oqs-provider/blob/main/oqs-template/oqs-kem-info.md
https://github.com/open-quantum-safe/oqs-provider
를 보시면 다른 키 교환 방식이나 암호화 방식도 연구는 되고 있는데, 아직까지 도입된건 Kyber밖에 없어보입니다
추신 2 : 적용하실려면 NGINX의 conf를 수정해서 ssl_ecdh_curve의 젤 앞에 X25519Kyber768Draft00를 붙이면 끝입니다 (미지원 버전으로 하면 에러나니 하지마세요)
http://www.2cpu.co.kr/hardware_2014/44147
컴 케이스 작다고 불타거나 하지 않아요
1. nginx 디렉토리 내에서 boringssl clone 진행
mkdir lib && git clone https://github.com/google/boringssl lib/boringssl
2. boringssl 빌드
cd lib/boringssl && \
mkdir build && \
cd build && \
cmake .. && \
make
-> 패키지는 cmake, golang, gcc-c++, libunwind-dev 등등 필요.
-> make 할 때 오류나는 것들에 대해 의존성 해결
3. nginx 에서 configure 옵션 추가 (--with-openssl 옵션은 필요 없습니다.)
cd ../../..
auto/configure \
--with-cc-opt="-I./lib/boringssl/include" \
--with-ld-opt="-L./lib/boringssl/build/ssl -L./lib/boringssl/build/crypto" \
... (기타 옵션 - with-http_ssl_module 등등)
4. 빌드가 완료되면 nginx 디렉토리로 복귀 후 빌드
5. X25519Kyber768Draft00 테스트
cd lib/boringssl/build
./bssl s_client -connect [domain] -server-name [domain] -curves X25519Kyber768Draft00
(Connected. 가 뜨면 성공)
덕분에 1방에 성공했네요
openssl 지정 옵션을 제거하고 라이브러리등만 수동으로 지정해주니 넘어가네요 (system openssl 사용이라 뜨는거 막을려고 동시 사용도 시도해봤으니 역시 에러)
결국 원흉은 openssl 지정 옵션이었네요
일단 conf도 좀 만져서 일부 옵션 수정해야했습니다
먼저 X25519Kyber768Draft00를 지원하는 대신 X448을 지원하지 않네요
이외에 ssl_stapling도 미지원인지 경고 뜨네요 (에러가 아니니 넘어가긴 함)
이게 좀 웃기는게 클라로 접속할때는 OCSP stapling 지원하는데 (항목이 있음), 서버로는 지원 안 하는지 ssl_ocsp is not supported on this platform이라고 떠버리네요
그리고 X448 보다는 X25519 사용이 사실상 권장되고 있어서 굳이 상관은 없습니다.
-> 정확히는 Chrome 최신버전에서는 X448 을 지원하지 않고 X25519, P-256, P-384 만 지원합니다.
OCSP Stapling 은 외국에서 이미 어느분이 만드신게 있으니 그것을 참고해보시면 될 듯 합니다.
https://github.com/kn007/patch/issues/4
ocsp 파일을 받아와서 직접 아래와 같이 nginx 에서 설정하셔야 하구요..
https://stackoverflow.com/questions/56292411/how-to-verify-certificate-with-ocsp-using-openssl
ssl_stapling_file xxx.ocsp;
이미 https://github.com/kn007/patch/blob/master/Enable_BoringSSL_OCSP.patch 패치 먹였습니다
적용후 SSLlab 돌려보니 OCSP Stampling 된다고 나옵니다
좀 웃기는건 클라로 시험할때 항목은 있는데도 지원 안 되는지 여전히 해당 항목은 no라고 떠버리네요 (OpenSSL은 정상적으로 OCSP 결과 뽑아줍니다)
이미 OCSP 먹이는 상태에서 TLS 라이브러리만 바꾼거라 나머진 손 될 필요 없네요 (cron으로 자동 갱신되게 해놨습니다)
OpenSSL 신기술 도입에 의외로 소극적이랄까 늦은편이라 이럴떈 좀 귀찮네요
X448 호환성땜에 상위에 넣어둔거지 사실 그거 안 써도 될만큼 서버 CPU 성능 썩어넘치는지라 상관없긴합니다
호환성따위 다 깡그러니 무시해버리면 SSLLab 100점 받는것도 일도 아닌데, 약간 구버전 클라까지 챙기다보니 일부 90점이네요 (100/100/90/90)
10에서 Trident로 웹뷰 구현하거나, 파일 다운 받을때나 구버전 Android 호환이 될정도로 하위 호환성을 보장하면서 HTTP/3같은 최신 기술까지 지원이 동시에 보장되는 변태 설정입니다
참고로 Kaspersky등의 일부 백신 쓰면 TLS 디코딩후 다시 인코딩하다보니 크룸에서 kyber 안 된다고 떠버리긴하네요
이거땜에 삽질하느라 주말에 한 4시간 꺤거같은데 덕분에 해결되었습니다
https://blog.dateno1.com/?p=6119
간단하게 게시물 작성해봤습니다 (삽질하느라 시간 낭비하는건 저 1명이면 충분합니다)
해당 게시물 필요하신분들은 마음대로 퍼가셔도 되고, 허가 안 받으셔도 되고, 수정하셔도 됩니다 (출처 표기조차 불필요) (다만 불필요한 스팸 유입 방지를 위해 링크 유포는 하지말아주세요)