public-key-cryptography

2 개의 포스트

cloudflare

인증서 투명성 모니터링이 이제 정식 출시되었습니다 (새 탭에서 열림)

Cloudflare는 Certificate Transparency(CT) 모니터링에서 자사가 발급한 정상적인 인증서 갱신까지 알림으로 보내던 문제를 해결했다. 이제 Cloudflare가 관리·발급한 인증서는 자동으로 필터링하고, 외부에서 발급된 예상치 못한 인증서만 알림을 보낸다. 이를 위해 인증서 발급 초기부터 최종 인증서까지 유지되는 공개키 기반 식별자 `spki_sha256`를 사용한다. ## CT 모니터링의 알림 과다 문제 - CT 모니터링은 고객 도메인에 새로운 TLS 인증서가 공개 CT 로그에 등장하면 이메일을 보낸다. - 이 기능은 잘못 발급된 인증서를 조기에 발견하는 데 유용하지만, Cloudflare가 고객을 대신해 발급하는 인증서도 모두 알림 대상이었다. - Universal SSL, Advanced Certificate Manager, Total TLS, Backup Certificate 등의 정상적인 발급·갱신이 반복적으로 CT 로그에 기록된다. - 기존 인증서는 최대 60일마다 갱신될 수 있으며, 2029년에는 최대 유효기간이 47일로 줄어들 예정이라 정상 갱신 알림은 더욱 늘어날 수 있다. - 결과적으로 중요한 외부 인증서 발급 알림이 정상적인 갱신 알림에 묻히거나, 사용자가 기능을 꺼버리는 문제가 발생했다. ## 인증서 관리 시스템과 CT 알림 시스템의 단절 - 인증서 발급 시스템은 내부 발급 정보를 관리하고, CT 알림 시스템은 공개 CT 로그를 읽어 알림을 생성한다. - 두 시스템은 같은 인증서를 다루지만 처리 시점과 보유 정보가 다르다. - CT 알림 시스템이 로그를 확인하는 순간에는 해당 인증서가 Cloudflare 발급인지 알려주는 발급 시스템의 정보가 없었다. - 따라서 “이 인증서가 Cloudflare가 발급한 것인가?”를 판단할 연결 고리가 필요했다. ## 사전 인증서와 최종 인증서의 처리 순서 - 하나의 인증서 발급은 일반적으로 다음 두 단계로 CT 로그에 기록된다. - CA가 사전 인증서(pre-certificate)를 생성하고 로그에 기록한다. - SCT(Signed Certificate Timestamp)를 최종 인증서에 포함한 뒤 최종 인증서를 다시 로그에 기록한다. - 하나의 발급 요청에 대해 두 개의 로그 항목이 생기므로, Cloudflare는 `stripped_fingerprint`를 사용해 중복 알림을 방지했다. - `stripped_fingerprint`는 DER로 인코딩된 TBSCertificate의 해시이며, 사전 인증서와 최종 인증서 쌍을 식별하는 데 적합하다. - 그러나 발급 시스템은 사전 인증서를 받지 않기 때문에 이 값을 발급 초기에 계산할 수 없다. - 사전 인증서가 먼저 로그에 기록되는 짧은 시간 동안에는 발급 시스템 데이터베이스에 해당 fingerprint가 없어, Cloudflare가 발급한 인증서임에도 알림이 발생할 수 있었다. ## 공개키 기반 식별자 선택 새 식별자는 다음 조건을 만족해야 했다. - CT 로그에 기록되기 전에 생성될 것 - 사전 인증서와 최종 인증서 전반에서 동일할 것 - CT 알림 시스템이 로그 정보만으로 다시 계산할 수 있을 것 - 인증서 발급 요청마다 고유할 것 이 조건을 만족하는 값으로 인증서의 공개키가 선택됐다. - 공개키는 `SubjectPublicKeyInfo(SPKI)` 구조 안에 포함된다. - 키 생성 시점부터 CSR, 사전 인증서, 최종 인증서까지 동일하게 유지된다. - Cloudflare는 발급마다 새로운 키 쌍을 생성하므로 공개키는 사실상 발급 요청마다 고유하다. - 개인키는 Cloudflare만 보유하므로, 동일한 공개키를 가진 유효한 인증서는 Cloudflare 발급 과정에서 나온 것으로 판단할 수 있다. - Cloudflare는 DER 인코딩된 SPKI를 SHA-256으로 해시한 `spki_sha256` 값을 사용한다. ## `spki_sha256`를 이용한 알림 필터링 - 인증서 발급 시스템은 CSR에서 `spki_sha256`를 계산해 키 생성 시점에 데이터베이스에 저장한다. - CT 알림 시스템은 CT 로그에서 인증서를 발견하면 공개키로 동일한 `spki_sha256`를 다시 계산한다. - 이후 발급 시스템 데이터베이스에서 해당 값을 조회한다. - 값이 있으면 Cloudflare가 발급한 인증서로 간주하고 알림을 억제한다. - 값이 없으면 외부 발급 인증서로 간주하고 기존처럼 알림을 보낸다. - 사전 인증서와 최종 인증서의 공개키가 동일하므로 어느 항목이 먼저 처리되더라도 일관되게 판단할 수 있다. ## 필터링 적용 결과 - Cloudflare가 관리하는 Universal SSL, Advanced Certificate Manager, Total TLS, Backup Certificate는 정상적으로 알림에서 제외된다. - 사전 인증서만 로그에 남고 최종 발급이 중단된 경우에도 Cloudflare 발급 기록과 일치하므로 불필요한 알림이 발생하지 않는다. - 사용자가 직접 업로드한 커스텀 인증서는 Cloudflare가 키를 생성하지 않았으므로 발급 시스템에 일치하는 키 기록이 없다. - 따라서 외부에서 관리되는 커스텀 인증서나 예상치 못한 인증서 발급은 계속 알림 대상이다. Cloudflare의 개선은 정상적인 내부 인증서 갱신을 제거하면서도 외부 발급 인증서는 놓치지 않도록 해 CT 모니터링의 신호 대 잡음비를 높인 사례다. 사용자는 알림을 끄기보다, 이제 실제로 확인할 가치가 있는 인증서 발급 이벤트를 중심으로 대응할 수 있다.

gitlab

패스키를 통한 비밀번호 없는 로그인 및 2단계 인증이 GitLab에서 사용할 수 있습니다 (새 탭에서 열림)

GitLab이 계정 보안 강화와 사용자 편의성 증대를 위해 패스키(Passkeys) 지원을 공식적으로 시작했습니다. 이제 사용자들은 지문, 얼굴 인식 또는 PIN을 사용하여 비밀번호 없이 로그인하거나, 피싱 방지 기능이 탑재된 강력한 이중 인증(2FA) 수단으로 패스키를 활용할 수 있습니다. 이번 업데이트는 보안 환경을 개선하고 다중 인증(MFA) 사용률을 높이려는 GitLab의 '보안 설계(Secure by Design)' 서약 이행의 일환입니다. **패스키의 기술적 원리와 보안성** * 패스키는 WebAuthn 기술과 공개키 암호화(Public-key cryptography) 방식을 기반으로 작동합니다. * 개인키(Private Key)는 사용자의 기기에 안전하게 보관되어 절대 외부로 유출되지 않으며, GitLab 서버에는 공개키(Public Key)만 저장됩니다. * 이러한 구조 덕분에 설령 GitLab 서버가 침해당하더라도 공격자가 사용자의 계정에 접근할 수 있는 유효한 인증 정보를 탈취하는 것이 근본적으로 불가능합니다. **광범위한 호환성 및 설정 방법** * 데스크톱 브라우저(Chrome, Firefox, Safari, Edge)는 물론 모바일 기기(iOS 16+, Android 9+), FIDO2 하드웨어 보안 키를 모두 지원합니다. * 사용자는 자신의 프로필 설정 내 'Account > Manage authentication' 메뉴에서 패스키를 간단히 등록할 수 있습니다. * 여러 기기에서 편리하게 접속할 수 있도록 계정 하나에 다수의 패스키를 등록하여 사용하는 것이 가능합니다. **보안 설계(Secure by Design) 서약 준수** * GitLab은 CISA(미국 사이버보안 및 인프라 보안국)의 'Secure by Design' 서약에 동참하여 제품 전반의 보안 수준을 높이고 있습니다. * 패스키는 해당 서약의 핵심 목표 중 하나인 다중 인증(MFA) 채택률 확대를 달성하기 위한 핵심 요소입니다. * 기존에 2FA를 활성화한 사용자의 경우 패스키를 등록하면 해당 방식이 기본 인증 수단으로 자동 설정되어 더욱 매끄러운 로그인 경험을 제공합니다. 보안 사고의 상당수가 피싱을 통한 계정 탈취에서 시작되는 만큼, GitLab 사용자는 보안 수준을 높이기 위해 기존의 일회용 비밀번호(OTP) 방식을 대체하거나 보완할 수 있는 패스키를 적극적으로 등록해 사용할 것을 권장합니다.