본문 바로가기

Server Infra/Security

보안 스터디 - 서명과 영지식 증명 (6/?)

728x90

이전 과정에서 공부한 인증키에서 이야기된 서명에대한 내용이다. 일반적으로 서명 체계는 세 가지 알고리즘으로 구성된다. 

  • 서명자가 새로운 비밀키(개인키)와 공개 키를 생성하는데 사용하는 키 쌍 생성 알고리즘
  • 개인 키와 메시지를 사용하여 서명을 생성하는 서명 알고지름
  • 공개 키, 메시지, 서명을 사용하여 성공 또는 오류 메시지를 반환하는 알고리즘

이렇게 만들어진 서명은 메시지의 원본과 메시지의 무결성을 인증하는 데 유용하다.

  • 원본 : 내 서명이 있는 경우 내가 보낸것
  • 무결성 : 누군가가 메시지를 수정하면 서명이 무효화 된다.

그러면 어디에 사용될까?

우리는 아주자주 서명이 들어간 인증 키 교환을 사용한다. 예를 들어서 https://naver.com과 같은 tls 적용된 키 교확 그리고 웹 PKI(Web Public Key Infrastructure)이다. 이 기술은 웹 브라우저가 매일 방문하는 수 많은 웹사이트와 수행하는 키 교환을 인증하는데 사용된다.

 

자 그러면 서명이 어떻게 작동하는지 작동 방식을 알아보겠다. 서명은 영지식 증명(Zero-Knowledge Proof, ZKP)라는 증명 법에서 왔다. ZKP에 대해선 자세히 설명하진 않겠다. 단순하게 설명하자면 내가 알고있는 개념과 지식을 노출하지 않으면서 검증자에게 내가 해당 지식과 개념을 알고있다는 것을 증명하는 방식이다. 문제는 이것이 대화형으로 이루어진다는 것이다.

 

앞서 정리한 내용처럼 암호학에서 대화가 많으면 그만큼 정보가 누출된다는 것이고 그만큼 오버헤드가 생긴다는 것이다. 따라서 최근 대화형 ZKP는 사용되지 않는다. 따라서 해당 정보를 알고 있음을 증명하기 위해 제 3의 인증기관 즉 서명 체계가 생긴것이다.

 

서명 알고리즘

서명 알고리즘은 DH, RSA, ECDH등의 다양한 알고리즘이 있다. 이중 DH는 앞서 정리한 키 교환 알고리즘(디피-헬먼)이다. RSA는 아마 실무를 접한 사람이라면 많이들 볼 알고리즘 일 것이다. 이건 나도 Openssl을 사용하다 보면 엄청나게 쓰게 된다. 그 만큼 많은 곳에서 사용중인 알고리즘이지만 이 책에서는 더이상 사용하는것을 권장하지 않는다. 왜냐하면 표준화된 첫 번째 서명 체계인 만큼 작동방식이 많은 이들에게 알려졌고 서명하고 암호화 하는것과 반대의 복호화 개념또한 많이 알려져 있기 때문이다.

 

따라서 최근 개선된 형태로 RSA-PSS가 나왔다. RSA-PSS는 아래와 같이 작동한다

  • PSS 인코딩 알고리즘을 사용하여 메시지 인코딩
  • RSA를 사용하여 인코딩된 메시지에 서명

물론 개선된 만큼 보안 증명이 있고 구현이 쉽지만 내부 구현 방식이 타원 곡선을 기반으로 하기 때문에 새로운 체계의 도입으로 채택률이 낮다.

 

그래서 아직도 RSA만을 사용하나? 아마 간간히 보이는 ECDSA나 EdDSA라는 암호화 알고리즘과 서명체계가 있다는것을 알것이다. ECDSA는 보안 증명이 제공되지 않지만 슈노어 서명에서는 제공된다.  EdDSA는 ECDSA와 같은 DSA 알고리즘을 사용하는것 처럼 보이지만 다르다. EdDSA는 실제로 슈노어 서명을 기반으로 한다.

 

또한 모든 서명 작업에 대해 새로운 임의성을 요고하지 않기 때문에 경정론적인 서명을 생성한다. 따라서 대부분의 암호학에서 권장하는 알고리즘으로 손꼽힌다.

 

여기까지 암호학에서 기반으로 하는 알고리즘들을 알아보았다. 솔직히 8장까지는 모르는 내용도 많고 수학적 지식이 상당히 많이 필요하다. 단순히 알고리즘만 알고 프로토콜만 알게 되었다는 것으로 정리를 마치고 다음은 가장 보고 싶었던 장인 9장 보안 전송으로 넘어가겠다.

 
728x90