[암호화] RSA (Rivest-Shamir-Adleman)
RSA (Rivest-Shamir-Adleman)
RSA는 1977년에 Ron Rivest, Adi Shamir와 Leonard Adleman에 의해 개발된 알고리즘을 사용하는 인터넷 암호화 및 인증 시스템이다. RSA 알고리즘은 가장 보편적으로 사용되는 암호화 및 인증 알고리즘으로서, 넷스케이프와 마이크로소프트 웹브라우저 기능의 일부로 포함된다. 이것은 또한 로터스 노츠, 인튜잇의 Quicken 등 많은 제품에 채용되어 있기도 하다. 이 암호화 시스템의 소유권은 RSA Security라는 회사가 가지고 있다. 이 회사는 알고리즘 기술들을 라이선스 해주고, 또 개발도구 등을 판매하기도 한다. 이 기술들은 기존에 이미 나와있거나 제안되어 있는 웹, 인터넷 및 컴퓨팅 표준들의 일부를 이루고 있다. RSA 시스템의 동작원리 공개키와 개인키의 획득에 사용되는 알고리즘의 상세한 수학적 설명은 RSA 웹사이트에서 찾아볼 수 있다. 간단히 말해, 이 알고리즘은 두 개의 큰 소수 (소수는 그 숫자와 1로만 나누어지는 수이다)들의 곱과, 추가 연산을 통해 하나는 공개키를 구성하고 또하나는 개인키를 구성하는데 사용되는 두 세트의 수 체계를 유도하는 작업이 수반된다. 한번 그 키들이 만들어지면, 원래의 소수는 더 이상 중요하지 않으며, 버릴 수 있다. 공개 및 개인키 둘 모두는 암호화/복호화를 위해 필요하지만, 오직 개인키의 소유자만이 그것을 알 필요가 있다. RSA 시스템을 사용하면, 개인키는 절대로 인터넷을 통해 보내지지 않는다. 개인키는 공개키에 의해 암호화된 텍스트를 복호화하는데 사용된다. 그러므로, 내가 만약 누군가에게 메시지를 보내는 상황을 가정해 보면, 나는 중앙의 관리자로부터 수신자의 공개키를 찾은 다음, 그 공개키를 사용하여 보내는 메시지를 암호화할 수 있다. 수신자는 그것을 받아서, 자신의 개인키로 복호화하면 된다. 프라이버시를 확실하게 하기 위해 메시지를 암호화하는 것 외에도, 자신의 개인키를 사용하여 디지털 서명을 암호화해서 함께 보냄으로써, 그 메시지가 틀림없이 바로 당신에게서 온 것임을 받는 사람에게 확신시켜줄 수 있다. 메시지를 받은 사람은, 발신자의 공개키를 이용해 메시지를 복호화할 수 있다. 아래의 표가 이러한 과정을 이해하는데 도움을 줄 수 있을 것이다. |
구 분 | 누구의 어떤 키를 사용하나? | |
암호화된 메시지를 보냄 | 수신자의 공개키 | |
암호화된 서명을 보냄 | 발신자의 개인키 | |
암호화된 메시지를 복호화 | 수신자의 개인키 | |
암호화된 서명 (발신자 인증) 을 복호화 | 발신자의 공개키 |
@RSA의 대표적인 사용 예 -> 전자서명
- 보통 어떠한 종이문서에 검수자의 서명이 되어 있으면 독자에게 신뢰를 줄 수 있다. 문서에 서명이 되어 있다는 것은 문서의 내용이 정확하고 누군가에 의해 검증이 되었다는 뜻이기 때문이다. 전자서명도 이와 마찬가지다. 차이점은 종이문서 대신 디지털 문서에 서명을 하는 것이다. 전자서명은 크게 서명(Signing)과 인증(Verification) 두 가지 과정으로 나뉜다. 서명은 문서가 검증되었음을 알리는 과정이고, 인증은 독자가 해당 문서에 서명이 되었는지를 확인하는 과정이다.
- 원리는 문서 데이터의 해쉬(hash)값을 비교해서 일치하는지 여부를 검증하는 것이다. 서명자는 문서의 데이터를 해쉬함수(hash function)를 통해 해쉬값을 생성하고, 생성된 해쉬값을 비밀키(Private Key)로 암호화한 후 문서에 첨부한다. 반대로 서명된 문서인지 검증하기 위해서 서명 부분을 따로 떼내어 공개키(Public Key)로 복호화하고, 문서에서 서명을 제외한 데이터를 다시 같은 해쉬함수를 통해 해쉬값을 얻어낸다. 두가지 값이 일치하는지 확인하여 일치하면 서명된 문서이고, 그렇지 않으면 서명되지 않은 문서인 셈이다.