RSA 암호화

RSA암호화는 공개키 암호화 시스템의 하나로, 암호화 뿐만 아니라 전자서명이 가능한 최초의 알고리즘입니다.

RSA암호화는 비대칭 방식으로 암호화 하는 키와 복호화하는 키가 다른 암호화 방식입니다.

소인수분해의 난해함을 이용한 암호화 방식으로 공개키만 가지고는 개인키를 알아낼 수 없도록 설계되어 있습니다.


RSA 암호화 처리 방식

RSA 암호화는 두 개의 키를 갖습니다.

- 키 : 메시지를 열고 잠그는 상수


공개키와 개인키 두 가지를 사용하는데

- 공개키 : 데이터를 암호화하는데 사용하는 키, 공개되어 있는 키

- 개인키 : 암호화된 데이터를 풀어내는데 사용하는 키, 복호화 할 수 있는 키, 공개되어있지 않은 키라고 해서 다른말로 비밀키라고도 합니다.

누구나 암호화 시킬 수 있지만 그것을 볼 수 있는 사람은 개인키를 가진 사람들만 볼 수 있습니다.

이러한 암호화 방식을 공개키 암호화 방식이라고 합니다.


SSL에서 공개키 암호화 방식을 주로 사용하는데 RSA도 공개키 암호화 방식을 사용하지만 개인키로 암호화하여 공개키로 복호화할 수도 있습니다.

- SSL과 공개키 암호화 방식은 추후에 따로 포스팅하겠습니다.



RSA 동작 과정의 예

1. 서버에서 RSA 공개키와 개인키를 생성하여 개인키는 세션에 저장하고 공개키는 자바스크립트 로그인 폼이 있는 페이지로 출력한다.

2. 클라이언트에서 로그인 폼은 자바스크립트가 실행되지 않는 환경에서 실행되면 안된다.

3. 클라이언트에서 로그인 폼에 사용자의 ID와 비밀번호를 넣고 실행을 누르면 자바스크립트가 이 값들을 가로챈다.

- 사용자 ID와 비밀번호를 공개키를 이용해 RSA로 암호화하여 서버로 전송한다.

4. 서버에서는 서버측 세션에 저장된 RSA 개인키로 암호화된 사용자 ID와 비밀번호를 복호화한다.

5. 서버측의 데이터베이스에 저장된 사용자 ID와 비밀번호가 일치하는지 확인한다.

- 이 때 데이터베이스에서도 RSA 방식의 공개키로 암호화된 사용자 ID와 비밀번호를 복호화하여 비교한다.

- 성능상의 손해를 보지만 데이터베이스 탈취에 따른 정보유출에 대비할 수 있다.



RSA 암호화 방식 구현 참고자료

Bigintegers and RSA in Javascript

- BASE64 방식 암호화에 에러가 있는 듯 합니다.

- 인코딩 하지 않고 일반 16진수 문자열로 서버에 전송하는 방법으로 대체



출처

http://kwon37xi.egloos.com/4427199

http://ko.wikipedia.org/wiki/RSA_%EC%95%94%ED%98%B8

'Basics > Hashing, Encryption' 카테고리의 다른 글

SHA 해싱  (0) 2014.11.17
Posted by 긍정왕오킹