사용자들은 모두 서로 PublicKey(공개 키)와 SecretKey(비밀 키)를 가지고 있다. 이 중 공개키는 누구나 볼 수 있도록 오픈된 공간에 둔다.
공개키로 암호화된 메세지는 비밀 키로밖에 복호화 할 수 없다.
두 사용자 A, B가 있을 때 A가 B에게 암호화된 메세지를 보내고 싶다. A는 오픈되어있는 B의 공개키를 통하여 메세지를 암호화하고, 전송한다.
B는 암호화된 메세지를 받고 자신만이 가지고 있는 비밀 키로 복호화한다.
중간에 C가 암호화된 메세지를 탈취하였지만, B의 비밀 키가 없어서 복호화 할 수가 없다.
이렇게 보내는 메세지는 탈취당해도 안전하지만, 이 메세지가 정말 A가 보낸 메세지인지는 알 수가 없다. 이를 증명하기 위해 전자 서명을 사용한다
메세지의 무결성과 송신자의 신원을 보장하기 위해 송신자 A는 SHA-256과 같은 해시 알고리즘을 사용해 메세지의 해시 값을 계산하고 자신의 비밀 키로 해시값을 암호화한다. 이를 서명이라 한다
이후 메세지에 자신의 서명을 같이 보낸다.
수신자 B는 메세지의 해시 값을 계산하고, 메세지의 서명을 A의 공개 키로 복호화한다.
이 후 메세지의 해시 값과 복호화된 메세지의 서명이 같다면, 이를 A가 보낸 메세지로 신뢰할 수 있다.
이 시스템의 보안성은 큰 정수를 인수분해하기 어렵다는데에 기인한다.
큰 소수 p, q의 곱인 n으로 공개키를 만들고, 그 역원으로 비밀 키를 만든다. n은 매우 큰 수이므로, 이를 소인수분해하여 p, q를 알아내기가 불가능에 가깝다.
따라서 공개키 n을 오픈된 공간에 공개해도 상대방이 복호화가 불가능한 것이