Signatures and zero-knowledge proofs
- 영지식증명(zero-knowledge proofs)과 암호화 서명(cryptographic signatures)
- 암호화 서명을 위한 현존하는 표준
- 서명의 섬세한 행동과 그 함정을 피하는 것
What is a signature?
How to sign and verify signatures in practice
A prime use case for signatures: Authenticated key exchanges
A real-world usage: Public key infrastructures
Zero-knowledge proof(ZDPs): The origin of signatures
Schnorr identification protocol: An interactive zero-knowledge proof
Signatures as non-interactive zero-knowledge proofs
The signature algorithms you should use (or not)
RSA PKCS#1 v1.5: A bad standard
RSA-PSS: A better standard
The Elliptic Curve Digital Signature Algorithm(ECDSA)
The Edwards-curve Digital Signature Algorithm(EdDSA)
Subtle behaviors of signature schemes
Substitution attacks on signatures
Signature malleability
Summary
- 디지털 서명은 실제 서명과 비슷하나, 암호화로 뒷받침되므로 서명 개인 키를 제어하지 않는 사람이 위조할 수 없도록 만든다
- 디지털 서명은 출처(예로, key exchange의 한 사람)을 인증하고 전환적 신뢰를 제공하는데에 유용하다. (내가 앨리스를 신뢰하고 앨리스가 밥을 신뢰하면, 나는 밥을 신뢰할 수 있다)
- 영지식 증명(ZKP)은 증명자가 특정 정보(증인)의 지식을 드러내지 않고도 증명할 수 있게 해준다. 서명 작업 중, 검증자가 온라인 상태가 아니어도 되기에 서명은 비상호작용 ZKP로 볼 수 있다.
- 표준을 통해 서명할 수 있다.
- RSA PKCS#1 v1.5는 오늘날 널리 사용되지만 올바르게 구현하기 어렵기에 추천하지 않는다
- RSA-PSS는 구현하기 쉽고 보안 증명이 가능한 더 나은 서명 방식이다. 안타깝게도, 타원 곡선 변형으로 인해 요즘에는 인기가 없어서 네트워크 프로토콜에 많이 쓰인다.
- 현재 가장 인기 있는 서명 방식은 타원 곡선을 기반으로 한다(ECDSA, EdDSA). ECDSA는 NIST의 곡선 P-256과 함께 사용되며, EdDSA는 Edwards25519 곡선과 함께 자주 사용된다.(이 조합을 Ed25519라고 한다)
- 서명이 전통적인 방식이 아닌 방법으로 사용될 경우, 몇몇 미묘한 속성이 위험할 수 있다.
- 몇몇 서명 방식이 key substitution attack에 취약하기 때문에 누가 메세지에 서명했는지 모호해지지 않도록 주의해야 한다. 외부 행위자는 이미 존재하는 서명을 검증할 수 있는 새로운 키 쌍을 만들거나, 주어진 서명을 검증할 수 있는 새로운 키 쌍, 새로운 메세지를 만들 수 있다.
- 서명의 고유성에 의존하지 마라. 첫째로, 많은 서명 방식에서는 서명자가 같은 메세지에 대해 임의의 많은 서명을 만들 수 있다. 둘째로, 많은 서명 방식은 malleable, 즉 외부행위자가 서명을 취하고, 같은 메세지에 대해 또다른 유효 서명을 만들 수 있다.