제로지식증명(ZKP)
- 정보를 노출하지 않고 증명하는 것
- 앨리스가 밥에게 비밀번호를 알고 있다는 것을 증명하려고 한다.
밥에게 비밀번호를 말하지 않고 알고 있다는 것을 증명하는 것이 가능할까?
- 앨리스가 밥에게 비밀번호를 알고 있다는 것을 증명하려고 한다.
밥의 동굴(Bob’s Cave)
- 조건
- 길은 Q지점에서 두 갈래로 갈린다.
- R과 S 사이의 벽은 비밀번호를 알고 있다면 넘어갈 수 있다.
- Alice는 Bob에게 비밀번호를 알리지 않고 비밀번호를 알고 있다는 것을 어떻게 증명해야 하나?
- 과정
- Bob이 보지 않는 동안 Alice는 R과 S 중 하나의 길을 선택해서 들어간다.
- Bob은 Alice에게 R 또는 S 방향으로 나오라고 요구한다.
- Alice는 Bob이 요구한 방향으로 나온다.
- 해당 과정을 N번 반복
- Alice가 비밀번호를 아는 경우
- 어느 방향으로 가든 벽을 넘을 수 있으므로 Bob이 요구하는 방향으로 나올 수 있다.
→ 성공률은 100%이다.
- 어느 방향으로 가든 벽을 넘을 수 있으므로 Bob이 요구하는 방향으로 나올 수 있다.
- Alice가 비밀번호를 모르는 경우
- 앨리스가 R에 있는데 Q로 나오라고 요구하는 경우 벽을 넘을 수 없으므로 할 수 없다.
- Alice가 R에 있을 때 성공률은 1/2, Q에 있을 때 성공률은 1/2
→ 한번 시도했을 때 성공률은 1/2(50%)이다.
- 정리
- N번 시도하는데 비밀번호를 모른 채 성공할 확률 =1/(2^N)
- 20번을 시도하는데 비밀번호를 모른 채 다 성공할 확률 → 1/(2^20)
→ 굉장히 낮음 - 시도 횟수에 따라 성공 횟수가 떨어짐
- 20번을 시도하는데 비밀번호를 모른 채 다 성공할 확률 → 1/(2^20)
- 성공했다면 Alice가 비밀번호를 알고 있다고 확률적으로 확신
- N번 시도하는데 비밀번호를 모른 채 성공할 확률 =1/(2^N)
- 과정
피아트-샤미르 프로토콜
- 제로 지식 증명 원칙의 인증 프로토콜
- 모듈로 N의 제곱근을 알아내는 것이 인수분해하는 것만큼이나 어렵다는 사실에 근거
- 가정
- 앨리스는 비밀 S를 안다.
- 숫자 N과 v = S^2 modN은 공개되어 있음
- 앨리스는 밥에게 S에 대한 어떤 정보도 노출하지 않고 S을 알고 있다고 설득시켜야 함
- 과정
- 앨리스는 난수 r을 선택해 밥에게 x = r^2 mod N을 전송
통지단계
- 밥은 이어서 난수 값 e를 0,1 중 선택하고 앨리스한테 전송한다.
질문단계
- 3번째 메시지에서 앨리스는 y = rS^emodN으로 응답하고 밥은
y^2= x*v^e modN 이 성립하는지 확인응답단계
- 앨리스는 난수 r을 선택해 밥에게 x = r^2 mod N을 전송
- 의미 해석
- e = 1인 경우
- 앨리스는 세 번째 메시지에서 y = SmodN으로 응답
- 식 y^2= x*v^emodN과 성립을 확인하면 → x*vmodN
→앨리스는 비밀 S를 알고 있어야 한다.
- e = 0인 경우
- 앨리스는 세 번째 메시지에서 y = r*mod\:N으로 응답
- 식 y^2= xv^emodN과 성립을 확인하면 → xmod N)
→앨리스는 비밀 S를 몰라도 된다.
- 무작위 난수이기 때문에 트루디가 밥을 속일 수 있는 확률은 1/2
- e = 1인 경우
- 보안상 장점 → 익명으로 인증이 가능하게 한다.
TCP 인증
- TCP가 간혹 인증을 위해 사용되기도 함.
- TCP접속에 IP주소를 사용해 인증
- TCP인증 방법은 안전하단 이유보다 편리하다는 이유로 많이 사용
TCP3 - 방향 핸드셰이크
- 과정
- 동기요구(또는 SYN)를 전송
- 동기 요구에 응답한 SYN-ACK
- (데이터를 포함할 수 있는) 이전 메시지에 대한 응답
- 밥은 앨리스의 IP주소에 SYN-ACK을 전송
→ 대응되는 ACK가 앨리스로부터 전송되었다고 추정
- 세 번째 메시지에서 ACK b+1이 나타난 것을 확인하면 두 번째 메시지가 SEQ b를 포함
→ 앨리스가 자신의 IP주소에서 두 번째 메시지를 송신받아 응답받았라고 확신 가능.
- 세 번째 메시지에서 ACK b+1이 나타난 것을 확인하면 두 번째 메시지가 SEQ b를 포함
- 해당 프로세스에서는 트루디는 SYN-ACK 패킷을 볼 수 없다고 가정
- 트루디가 b를 볼 수 있다면 ACK를 거짓으로 전송할 것이다.
- 트루디가 b를 볼 수 있다면 ACK를 거짓으로 전송할 것이다.
- 취약점
- 트루디가 밥이 보내는 최초 SEQ 번호를 예측 가능
- 과정
- 트루디가 일반적인 SYN 패킷을 최초로 보냄
- 밥은 SYN-ACK로 응답한다
→ 트루디는 밥이 보낸 SYN-ACK 패킷에 포함된 SEQ 값 b1을 조사
→ 트루디가 밥의 다음 최초 SEQ 값 b2를 예측하기 위해 b1을 이용할 수 있다고 가정 - 트루디는 앨리스의 IP주소 하나를 가장해 하나의 패킷을 밥에게 전송
- 밥은 가정에 의해 트루디는 볼 수 없다고 가정하고 앨리스의 IP주소에 SYN-ACK 전송
- 트루디는 b2를 추정할 수 있으므로 ACK b2+1을 밥에게 전송하여 3-방향 핸드세이크 완성
← b1을 통해 b2를 추정하였기 때문에
- 발생되는 일
- 밥은 앨리스의 주소에 항상 응답하기 때문에 가정에 의해 트루디로부터의 데이터를 수신
- 앨리스의 IP주소는 3-방향 핸드셰이크가 완성하지 않았기 때문에 접속이 종료됨
→ 트루디는 이러한 상황을 원하지 않음
→ 트루디는 앨리스에서 밥의 메시지가 처리되지 않도록, 또는
메시지가 처리되더라도 응답할 수 없도록 충분한 메시지를 전송 → 서비스 거부 공격- 앨리스의 접속이 단절된다면 트루디는 서비스 거부 단계 없이 공격 수행 가능
- 앨리스의 접속이 단절된다면 트루디는 서비스 거부 단계 없이 공격 수행 가능
- 보완법
- 최초 SEQ 번호는 반드시 난수로 설정한다.
- 트루디가 밥이 보내는 최초 SEQ 번호를 예측 가능