호우동의 개발일지

Today :

article thumbnail

제로지식증명(ZKP)

  • 정보를 노출하지 않고 증명하는 것
    • 앨리스가 밥에게 비밀번호를 알고 있다는 것을 증명하려고 한다.
      밥에게 비밀번호를 말하지 않고 알고 있다는 것을 증명하는 것이 가능할까?

 


밥의 동굴(Bob’s Cave)

밥의 동굴

  • 조건
    • 길은 Q지점에서 두 갈래로 갈린다.
    • R과 S 사이의 벽은 비밀번호를 알고 있다면 넘어갈 수 있다.

  • Alice는 Bob에게 비밀번호를 알리지 않고 비밀번호를 알고 있다는 것을 어떻게 증명해야 하나?
    • 과정
      1. Bob이 보지 않는 동안 Alice는 R과 S 중 하나의 길을 선택해서 들어간다.
      2. Bob은 Alice에게 R 또는 S 방향으로 나오라고 요구한다.
      3. Alice는 Bob이 요구한 방향으로 나온다.
      4. 해당 과정을 N번 반복

    • Alice가 비밀번호를 아는 경우
      비밀번호를 알땥
      비밀번호를 알때
      • 어느 방향으로 가든 벽을 넘을 수 있으므로 Bob이 요구하는 방향으로 나올 수 있다.
        → 성공률은 100%이다.
    • Alice가 비밀번호를 모르는 경우
      비밀번호를 모를 때
      비밀번호를 모를 때
      • 앨리스가 R에 있는데 Q로 나오라고 요구하는 경우 벽을 넘을 수 없으므로 할 수 없다.
      • Alice가 R에 있을 때 성공률은 1/2, Q에 있을 때 성공률은 1/2
        → 한번 시도했을 때 성공률은 1/2(50%)이다.

    • 정리
      • N번 시도하는데 비밀번호를 모른 채 성공할 확률 =1/(2^N)
        • 20번을 시도하는데 비밀번호를 모른 채 다 성공할 확률 → 1/(2^20)
          → 굉장히 낮음

        • 시도 횟수에 따라 성공 횟수가 떨어짐

      • 성공했다면 Alice가 비밀번호를 알고 있다고 확률적으로 확신

 


피아트-샤미르 프로토콜

  • 제로 지식 증명 원칙의 인증 프로토콜
  • 모듈로 N의 제곱근을 알아내는 것이 인수분해하는 것만큼이나 어렵다는 사실에 근거


  • 가정
    • 앨리스는 비밀 S를 안다.
    • 숫자 N과 v = S^2 modN은 공개되어 있음
    • 앨리스는 밥에게 S에 대한 어떤 정보도 노출하지 않고 S을 알고 있다고 설득시켜야 함

  • 과정
    피아트샤미르
    1. 앨리스는 난수 r을 선택해 밥에게 x = r^2 mod N을 전송 통지단계
    2. 밥은 이어서 난수 값 e를 0,1 중 선택하고 앨리스한테 전송한다. 질문단계
    3. 3번째 메시지에서 앨리스는 y = rS^emodN으로 응답하고 밥은
      y^2= x*v^e  modN 이 성립하는지 확인 응답단계

  • 의미 해석
    • 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

  • 보안상 장점익명으로 인증이 가능하게 한다.

 


TCP 인증

  • TCP가 간혹 인증을 위해 사용되기도 함.
    • TCP접속에 IP주소를 사용해 인증
    • TCP인증 방법은 안전하단 이유보다 편리하다는 이유로 많이 사용

 


TCP3 - 방향 핸드셰이크

핸드세이크

  • 과정
    1. 동기요구(또는 SYN)를 전송
    2. 동기 요구에 응답한 SYN-ACK
    3. (데이터를 포함할 수 있는) 이전 메시지에 대한 응답
  • 밥은 앨리스의 IP주소에 SYN-ACK을 전송
    → 대응되는 ACK가 앨리스로부터 전송되었다고 추정

    • 세 번째 메시지에서 ACK b+1이 나타난 것을 확인하면 두 번째 메시지가 SEQ b를 포함
      → 앨리스가 자신의 IP주소에서 두 번째 메시지를 송신받아 응답받았라고 확신 가능.

  • 해당 프로세스에서는 트루디는 SYN-ACK 패킷을 볼 수 없다고 가정
    • 트루디가 b를 볼 수 있다면 ACK를 거짓으로 전송할 것이다.

  • 취약점
    • 트루디가 밥이 보내는 최초 SEQ 번호를 예측 가능
      취약점
    • 과정
      1. 트루디가 일반적인 SYN 패킷을 최초로 보냄
      2. 밥은 SYN-ACK로 응답한다
        → 트루디는 밥이 보낸 SYN-ACK 패킷에 포함된 SEQ 값 b1을 조사
        → 트루디가 밥의 다음 최초 SEQ 값 b2를 예측하기 위해 b1을 이용할 수 있다고 가정

      3. 트루디는 앨리스의 IP주소 하나를 가장해 하나의 패킷을 밥에게 전송
      4. 밥은 가정에 의해 트루디는 볼 수 없다고 가정하고 앨리스의 IP주소에 SYN-ACK 전송
      5. 트루디는 b2를 추정할 수 있으므로 ACK b2+1을 밥에게 전송하여 3-방향 핸드세이크 완성
        ← b1을 통해 b2를 추정하였기 때문에
    • 발생되는 일
      • 밥은 앨리스의 주소에 항상 응답하기 때문에 가정에 의해 트루디로부터의 데이터를 수신
      • 앨리스의 IP주소는 3-방향 핸드셰이크가 완성하지 않았기 때문에 접속이 종료됨
        → 트루디는 이러한 상황을 원하지 않음
        → 트루디는 앨리스에서 밥의 메시지가 처리되지 않도록, 또는


        메시지가 처리되더라도 응답할 수 없도록 충분한 메시지를 전송 → 서비스 거부 공격 
        • 앨리스의 접속이 단절된다면 트루디는 서비스 거부 단계 없이 공격 수행 가능

    • 보완법
      • 최초 SEQ 번호는 반드시 난수로 설정한다.