웹 페이지에서 SSL 없이 RSA 암호화 로그인 하기 :: 소림사의 홍반장!

관련링크 >>>




기초 설명


암호화기술은 보호(privacy) 또는 인증(authentication) 기능의 
제공을 위한 기술이다. 특정 자료를 네트워크를 통해 주고 받을
때 혹은 저장장치에 저장시에 암호화 함으로써 침입에 의해 정보
가 유출되더라도 그 정보를 훔쳐간 자가 제대로 된 정보를 볼 수 
없게 만든다. 요즘은 주로 전자상거래에 관련되어 암호화 기술이
널리 사용되도 있다. 

암호화 기술의 보호 기능은 통신 채널로부터 정보를 채취해 내는 
것을 막는 것으로 정보가 노출된다 하여도 키가 없는 한 그 정보의 
의미를 알 수 없도록 함으로써 정보를 보호하는 것이다. 
인증은 정보가 전달되는 도중에 변경되지 않았다는 것을 보증하는
기능인 정보 무결성 기능을 제공하고, 정보 시스템에서 정보의 생성, 
전송, 처리, 기억, 판단 등의 행위에 관여한 사용자가 누구인지를 
알려주는 기능이다. 

암호화기술은 암호화와 복호화의 키 관리방법에 따라 크게 대칭형 
방식과 비대칭형 방식으로 나눌 수 있다. 대칭적 암호방식은 암호화 
키와 복호화 키가 동일한 전통적 암호방식(Conventional Crypto-system)
으로 단방향(One-way) 암호방식이라 불리기도 한다. 비대칭적 암호방식
은 암호화 키와 복호화 키가 서로 다르며 한 키는 공개하고 다른 키는
비밀로 한다. 그래서 이는 공개 키 암호방식(Public Cryptosystem), 
또는 양방향(Two-way) 암호방식이라 한다. 대칭형 방식의 대표적인 
예에는 DES(Data Encryption Standard)방식이 있고, 비대칭형 방식에는 
RSA(Rivest, Shamir, Adleman) 방식이 있다. 

DES 암호화 방식

DES 암호화 방식은 대표적인 대칭적 암호방식으로서, 미국 상무성의 
국립표준국(NBS)에서 미국 표준 암호 알고리즘으로 채택한 64 비트블럭의
입력 및 출력을 가지는 64비트 블럭 암호이다. 64비트의 키 블럭(key block) 
중 56비트가 암호화 및 복호화에 사용되고, 나머지 8비트는 키 블럭의 
parity check 용으로 사용된다. 

최근 들어 “DES 알고리즘은 보안성이 깨졌기 때문에 통신 보안기술로 
사용하지 말아야 한다"는 주장도 나오고 있으나 이는 사실과 다르다. 
DES에 대한 공격은 천문학적인 반복계산에 의해 가능하기 때문에 현재 
공격을 위한 비용이 약 1백만 달러에 가깝다. DES의 보안성을 유지하려면
난수발생 등의 방법을 이용해 자주 비밀키 값을 변경하거나, 이중 혹은 
삼중 DES 암호화를 하거나, RSA와 같은 비대칭 암호화기술과 적절히 
혼합하여 사용해야 한다. 

RSA 암호화 방식

RSA 암호화 방식은 매우 큰 정수의 소인수 분해가 어렵다는 가정하에서 
설계된 비대칭적 암호화 시스템이다. 시스템 구성은 다음과 같다. 

* 개의 큰 소수 p와 q를 생성하여 n = pq를 계산한다. 

* Euler 함수값 pi(n) = (p-1)(q-1)과 서로 소가 되는 e를 계산한다. 

* pi(n)과 e로부터 유클리드(Euclid)를 사용하여 ed가 mod pi(n)으로
1이 되는 d를 계산한다. 

* 위로부터 다음과 같은 공개 키 암호 시스템(public cryptosystem)을 
구성한다.


공개 키(public key) : n, e 
비밀 키(private key) : p, q, d
Message space = {M in Z | 0<= M Encryption : C = E(M) congruent to Me (mod n) 
Decryption : M D(C) = D(E(M)) congruent to Cd (mod n)congruent to Med (mod n) 

공개 키 e와 n을 가지고 비밀 키를 구할 수 있다면 RSA는 해독되게 
되지만, n으로부터 pi(n)을 구한다면 유클리드 알고리즘을 사용하여 
d를 쉽게 계산할 수 있으므로 전체적인 비도는 pi(n)의 계산에 달려
있는데, n을 소인수 분해할 수 있다면 pi(n)은 자동적으로 계산된다. 
따라서, n의 소인수 분해는 RSA가 해독됨을 의미한다. 
하지만, n의 소인수 분해를 모르고 pi(n)을 구하는 방법은 알려지지 
않고 있다. 

RSA 암호화 시스템을 안전하게 구성하기 위해서는 두 소수 p, q를 
n = pq가 인수 분해하기 어려운 형태가 되어야 한다. 현재까지 알려진
소인수 분해 알고리즘 중 어떤 것도 폴리노미알 바운드
( polynomial-bounded)되지 않았다. 

RSA의 계산은 DES에 비해 복잡한 편이다. 소프트웨어적으로만 시스
템을 구현해 실행할 때 DES에 비해 적어도 100 배의 실행시간이 소요
되며 하드웨어 상에서 적절히 구현하여 실행할 때는 1,000 배의 시간이 
소요되는 등 실행 속도에서 큰 차이가 있다. 따라서 언제쯤 빠른 실행
속도를 가진 RSA 전용 실행 프로세서가 다양한 하드웨어 환경에서 
개발되어 저렴한 가격으로 공급될 수 있느냐 하는 것이 RSA 암호화
기술의 보편적인 사용여부를 결정하는 중요한 전제조건이다. 

RSA 암호 시스템은 디지털 서명도 가능하게 한다. 사용자 A가 서명한 
메시지를 사용자 B에게 보내려 한다면, 사용자 B는 자신의 비밀 키인 KA-1로 
암호화한 후 이를 다시 사용자 B의 공용 키인 KB로 암호화한다. 
사용자 B는 수신 메시지를 자신의 비밀 키인 KB-1와 사용자 A의 공용 키인 
KA를 차례로 사용하여 복호화함으로써 이 메시지가 사용자 A에 의해 
서명되었슴을 확인한다. 

다른 카테고리의 글 목록

Dev. 웹/HTML.JSP 카테고리의 포스트를 톺아봅니다