이 장 요약
- 사람을 인증하는 것과 데이터를 인증하는 것의 차이점
- 사용자를 비밀번호나 키로 인증하기 위한 사용자 인증
- 사용자 장치간 연결을 보호하기 위한 사용자 지원 인증
암호학은 아래 두 개념으로 요약할 수 있음
실제 응용 프로그램에서 기밀성은 크게 문제가 되지 않음. 인증이 복잡함
지금까지는 "인증"이라는 단어가 혼란스럽게 쓰였는데,
초반에 인증이 실제로 무엇인지 소개하는 것으로 시작한다.
Authentication은 진짜. 진실, 유효한 것을 증명하거나 보여주는 과정 혹은 행동을 뜻한다. 즉, 아래처럼 나뉠 수 있다.
= 사용자 인증, 또는 비밀번호 제거로의 여정
user authentication : 기계가 인간을 인증하는 방법
user authentication의 가정
서버는 이미 인증되었으며
사용자는 그것과 안전한 연결을 공유한다
사용자들은 서로 다른 비밀번호를 잘 못만들며, 이 모든 비밀번호를 기억하기는 너무 힘들다. 이 문제를 타개하기 위하여 두 솔루션이 채택되었다.
오늘 날 SSO를 사용하는 두 가지 프로토콜은 다음과 같다
SAML은 엔터프라이즈 환경에서 널리 사용되지만, 현재로썬 레거시 프로토콜이다.
OIDC는 웹, 모바일 애플리케이션 어디에서나 볼 수 있다.
OAuth2는 OIDC가 사용하는 프로토콜로, 오용하기 쉽다.
SSO는 사용자가 관리해야 하는 비밀번호를 줄여주는 것뿐이지, 비밀번호를 완전히 제거하지는 않는다.
여전히 사용자는 OIDC provider에 연결하기 위해 비밀번호를 사용해야 한다.
결론: 사용자의 신원 관리를 간소화하는 방법으로 하나의 서비스의 한 개의 계정만으로 여러 서비스를 인증할 수 있는 솔루션
비밀번호를 보고 싶지 않나요? 비대칭 비밀번호 인증 키 교환을 사용해라.
asymmetric(augmented) password-authenticated key exchanges (PAKEs)라 불리는 암호화 프로토콜은 사용자가 자신의 비밀번호를 서버에 전달하지 않아도 된다. (양측이 비밀번호를 알아야 하는 대칭(균현잡힌) PAKEs 프로토콜과 대조됨.
SRP(Secure Remote Password) protocol : 현재 가장 인기있는 비대칭 PAKE. 2000년에 처음 RFC 2944에서 표준화됨. 이후 RFC 5054를 통해 TLS에 통합. 꽤 오래된 프로토콜임
PAKE 선택 프로세스로 선정된 프로토콜
OPAQUE는 O가 oblivious를 뜻하는 동음이의어 O-PAKE 에서 이름을 따왔다.
OPRF(oblivious pseudorandom function) 암호화 프리미티브에 의존한다.
OBLIVIOUS PSEUDORANDOM RUNCTIONS(OPRFS, 무의식적 의사 난수 함수)
OPRFs는 3장에서 배운 PRF를 모방한 두 명의 참가자로 구성된 프로토콜이다.
PRF : MAC과 어느정도 비슷하다. key, input을 받아 고정된 길이의 완전히 랜덤한 output을 제공한다
암호학에서 oblivious는 일반적으로 한 당사자가 다른 당사자가 제공한 입력을 알지 못한 채 암호화 작업을 계산하는 프로토콜이다
작동방식
여기서, Alice는 프로토콜을 검토하고 싶을때마다 다른 블라인드 팩터를 만들어야 한다. 어떤 블라인드 팩터를 사용하더라도 동일한 입력을 사용하는 한 항상 동일한 결과를 얻는다.
다음은 이산 로그 문제 그룹에서 구현된 OPRF 프로토콜의 한 예다.
이걸 이용해 asymmetric PAKE의 핵심을 만든다
The OPAQUE ASYMMETRIC PAKE, HOW DOES IT WORK?
Alice(클라이언트)가 인증된 키 교환을 서버와 하고 싶다.
그리고 Alice는 이미 서버의 공개 키를 알거나 인증할 방법이 있다.
1st IDEA. 공개 키 암호화를 사용하여 앨리스 측 연결을 인증한다. 앨리스가 장기 키 쌍을 소유하고 있고, 서버가 공개 키를 알고있는 경우, Alice는 개인 키를 사용해 서버와 상호 인증된 키 교환을 수행하거나 서버가 제공한 챌린지에 서명할 수 있다.
그러나 비대칭 개인 키는 너무 길어서 Alice는 비밀번호만 기억할 수 있다. 현재 기기에 키 쌍을 저장할 수 있지만, 나중에 다른 기기에서 로그인할 수 있기를 원한다.
2nd IDEA. Alice는 Argon2 같은 비밀번호 기반 키 파생함수(KDF)를 사용해 비밀번호에서 비대칭 개인 키를 얻을 수 있다. Alice의 공개키는 서버에 저장될 수 있다. 데이터베이스 유출 시 데이터베이스 전체에 대해 비밀번호를 테스트하는 사람을 피하고 싶다면, 서버가 각 사용자에게 비밀번호 기반 KDF와 함께 사용해야하는 다른 salt를 제공하도록 할 수 있다.
-> precomputation attack(로그인해서 salt를 받아 다음 오프라인에서 계산해서 찾는 공격)에 취약하다
3rd IDEA. 비대칭 개인 키를 도출하기 위해 Alice의 비밀번호화 함께 OPRF 프로토콜을 사용할 수 있다. 서버가 사용자마다 다른 키를 사용하는 것은 salt를 사용하는 것과 같은 효과를 볼 수 있다. 온라인 쿼리를 수행해야 하기에 오프라인 브루트포스 공격을 방지한다. 온라인 쿼리는 로그인 시도를 막는 방법 등으로 브루트 포스 공격을 막을 수 있기 때문에!
-> 이것은 OPAQUE가 실제 작동하는 방법은 아니다.
정리) 비대칭/증강 PAKE는 서버가 실제 비밀번호를 만나지 않아도 인증할 수 있게 하는 방법이다.
(일회용 비밀번호는 사실 비밀번호가 아니다! 대칭 키로 비밀번호 사용하지 않기)
OTP 기반 사용자 인증의 아이디어는 다음과 같다. 보안은 일반적으로 닞은 엔트로피의 비밀번호 대신, 16~32 byte의 균일한 랜덤 대칭 키에 대한 지식에서 비롯된다. 이 대칭 키를 사용하면 온디맨드 OTP를 생성할 수 있다.
OTP 기반 인증은 모바일 애플리케이션 또는 보안 키에서 가장 자주 구현된다
현재는 TOTP를 더 많이 쓴다. MOTP는 카운터를 클라이언트와 서버 모두 저장해야 하기 때문
TOTP 작동 방식
그러나 이 흐름은 이상적이지 않다.
이러한 이유로 인해 대칭 키는 비밀번호를 완벽히 대체하지 못한다.
다음으로, 비대칭 키를 사용해 이러한 단점을 어떻게 해결할 수 있는지 살펴보겠다.
Phishing
phishing(social engineering)은 인간의 취약점을 공격하는 것이다. 애플리케이션이 인증을 위해 일회용 비밀번호를 입력해야 한다면, 공격자가 애플리케이션에 사용자로 로그인을 시도하고, 일회용 비밀번호 요청을 받으면 유효한 비밀번호를 요청하는 전화를 하는 것이다.
(비대칭 키로 비밀번호를 대체하다)
public key cryptography에 대한 장이다.
서버를 인증할 때 asymmetric key를 사용하는 방법은 다음과 같다.
이 각각에 대해서 살펴보겠다.
Mutual Authentication in Key exchanges
= 키 교환에서의 상호 인증
= 연결을 인증하기 위해 key exchange에서 asymmetric key 사용
TLS서버가 클라이언트에게 인증서를 핸드셰이크의 일부로 사용하는 것을 요청할 수 있다.
서버가 핸드셰이크 중에 클라이언트에게 CertificateRequest
메세지를 보내 인증을 요청할 수 있다.
클라이언트는 이에 응답해 Certificate
메세지에 인증서를 포함해 보낸다.
이후, CertificateVerify
메시지를 통해 서명을 보낸다. 이 서명은 지금까지 전송된 모든 메시지와 수신된 메시지에 대한 서명이고, 키 교환에서 사용된 임시 공개 키도 포함이다.
서버가 클라이언트의 인증서를 인식하고, 클라이언트 서명을 성공적으로 검증하면, 클라이언트는 인증된 것이다.
SSH(Secure Shell) 프로토콜
: 클라이언트가 서버에 알려진 공개 키로 핸드셰이크 일부에 서명한다.
Post-handshake User Authentication with FIDO2
= FIDO2를 이용한 핸드셰이크 후 사용자 인증
= 인증된 서버와 이미 안전한 연결을 한 상태에서 asymmetric key 사용
비대칭 키를 사용한 두 번째 인증 방법=이미 안전한 연결(서버만 인증된 상태)에서 사용자를 인증하는 것
서버는 클라이언트에게 무작위 챌린지를 서명하도록 요청할 수 있다
재전송 공격(replay attack) 방지
Fast IDentity Online 2 (FIDO2)
FIDO2는 두 가지 명세로 나뉜다
WebAuthn은 이동식 인증기뿐 아니라 플랫폼 인증기(platform authenticator)도 사용할 수 있다. 플랫폼 인증기는 기기에서 제공하는 내장 인증기이며, 플랫폼마다 구현 방식이 다르다.
대부분 생체 인식(지문/얼굴)으로 보호된다
multi-factor authentication
비밀번호 대신 OTP나 FIDO2를 두 번째 인증 요소로 사용
= 사용자 지원 인증: 사람의 도움을 받아 장치 페어링
요즘 가장 흔히 접할수 있지만 안전하지 못한 연결에는 인터넷을 거치지 않는 프로토콜인 'Wi-Fi', 'NFC(Near Field Communication)'가 있다.
NFC는 휴대폰이나 은행 카드의 '비접촉식' 결제를 할 때 사용하는 방식이다.
이런 통신 프로토콜을 사용하는 장치는 저전력 전자기기부터 풀 기능의 컴퓨터까지 다양하다.
연결하려는 장치가 키를 표시하는 화면이나 수동으로 키를 입력하는 방법을 제공하지 않을 수 있다. 이것을 '프로비저닝' 장치라고 한다.
사람이 너무 긴 타이핑을 하거나 비교하는 것은 사용자 친화적이지 않기에 대부분의 프로토콜은 보안 관련 문자열을 4자리 또는 6자리의 PIN으로 줄이려 한다.
Proximity - NFC 프로토콜을 사용하는 경우 두 장치 모두 서로 가까이 있어야 한다
Time - 장치 페어링은 시간 제약이 있다. 예로 30초 안에 페어링에 성공 못하면 프로세스를 수동으로 재시작해야 한다.
=사전 공유키
두 기기를 안전하게 연결하려면 서로 믿을 수 있는 방법이 필요하다. 그 방법 중 하나는 공개 키를 사용해 인증하는 것이다. 그러나 여기서 문제가 생긴다
양쪽 기기가 서로의 공개 키를 설정한 후에는, 9장의 프로토콜을 사용해 상호 인증 키 교환을 수행할 수 있다
가장 안전한 방법은 암호학적 키를 사용하는 것이지만, 사용자 친화적이지는 않다는 것이다.
그러나 현실 세계의 암호학은 타협과 절충이 가득하며, 이러한 이유로 다음 두가지 인증 스키마가 존재하고, 기기 인증에서 가장 널리 사용된다
CPace: 두 기기가 서로 공통된 비밀번호를 알고있을때, 이를 이용해 안전하게 연결하는 방법이다. 즉, 비대칭키 대신 비밀번호를 사용해 인증하는 방법. 비밀번호는 짧고 입력하기 쉽기에 현실에서 자주 사용된다.
CPace 동작 원리
왜 안전할까?
즉, 비밀번호를 사용하지만 보안이 뛰어나고 사용하기 쉽다
= 키 교환이 MITM이었나요? 짧은 인증 문자열(SAS)을 확인해 보세요
SAS(Short Authenticated String)
SAS의 장점
SAS 문제 : 공격자가 SAS를 속이려할 수 있다
▶︎ 해결방법 : 공개 키 commitment
이 문제를 막기 위해 "기기는 공개 키를 미리 약속(commit)"하고 나중에 공개한다
SAS가 안전한 이유는? 공격자가 숫자(SAS)를 맞추려면, 운에 맡기는 수밖에 없다
요약
user authentication protocol(기계가 사람을 인증하기 위한 프로토콜)은 종종 서버만 인증된 보안 연결을 통해 이루어진다. 이러한 의미에서 one-way authenticated 연결을 mutually authenticated 연결로 업그레이드한다.
user authentication protocol은 비밀번호를 많이 사용한다. 비밀번호는 실용적인 해결책이고, 널리 받아들여졌다. 그러나 열악한 위생, 낮은 엔트로피, 데이터베이스 유출로 인해 문제가 야기되었다.
사용자가 여러 개의 비밀번호를 가지고 다니지 않게 할 두가지 방법
- password manager: 사용자가 사용하는 모든 애플리케이션에 대해 강력한 비밀번호를 생성/관리하는 데 사용
서버가 사용자의 비밀번호 학습/저장하는 것을 막을 수 있는 방법은 asymmetric password-authenticated key exchange(asymmetric PAKE)을 사용하는 것이다. (OPAQUE같은) asymmetric PAKE은 사용자가 비밀번호를 사용해 알려진 서버에 인증할 수 있지만, 실제로 비밀번호를 서버에 공개하진 않는다.
비밀번호를 사용하지 않으려면, 사용자가 one-time password(OTP) 알고리즘을 통해 대칭 키를 사용하거나 FIDO2 같은 표준을 통해 비대칭 키를 사용하면 된다
사용자 지원 인증 프로토콜은 종종 안전하지 않은 연결(WiFi, Bluetooth, NFC)을 통해 이루어지며, 두 장치가 서로 인증하는 데 도움된다. 이 시나리오에서 연결을 확보하기 위해 사용자 지원 프로토콜은 두 참가자가 사용할 수 있는 추가 인증된(기밀은 아님) 채널(ex. 디바이스 스크린)을 가지고 있다고 가정
디바이스의 공개 키를 다른 장치로 내보내면 강력하게 상호 인증된 키교환이 이루어질 수 있다. 이러한 흐름은 사용자 친화적이지 않고, 디바이스 제약(ex. 키를 내보내거나 가져올 방법이 없음)으로 인해 불가능할수도 있다.
CPace와 같은 symmetric PAKE(대칭 비밀번호 인증 키 교환)은 장치에서 비밀번호를 수동으로 입력하기만 하면 사용자가 긴 공개 키를 가져오는 부담을 줄일 수 있다. 예로, 대칭 PAKE는 이미 많은 사람들이 가정용 WiFi에 연결하기 위해 사용한다.
short authenticated string(SAS)을 기반으로 한 프로토콜은 키나 비밀번호를 가져올 수 없지만 키 교환 후 짧은 문자열을 표시할 수 있는 장치에 대한 보안을 제공할 수 있다. 이 짧은 문자열은 인증되지 않은 키 교환이 적극적으로 MITM이 되지 않도록 두 장치 모두에서 동일해야 한다.