Cryptography, 암호 이용 활성화

2013. 7. 30. 10:50BASIC

암호(Cryptography) 에 대한 기초적인 정보 부터 분류 까지 상세하게 나온 페이지를 먼저 노티 합니다.

 http://seed.kisa.or.kr/iwt/ko/index.do

 

1. 암호의 역사

 

 

-       종래의 관용 암호 방식 또는 대칭키 암호 방식에서는 암호화키와 복호화키가 동일한 비밀키를 사용하기 때문에 송신자와 수신자는 비밀 통신을 하기 전에 비밀키를 공유하고 있어야 한다.

-       반면 공개키 암호 방식에서 하나의 쌍이 되는 공개키와 비밀키를 생성하여 암호화에 사용되는 공개키는 공개하고, 복호화에 사용되는 비밀키는 사용자가 안전하게 보관하도록 한다.

공개키 암호 방식에서는 송신자와 수신자가 사전에 키를 공유를 할 필요가 없기 때문에 불특정 다수 사용자 간에 사전 준비가 없이도 암호 통신망을 구축하는데 유용하게 사용할수 있다.

 1978 MIT 대학의 Rivest, Shamir , Adleman 은 소인수 분해 문제에 기반을 둔 RSA 공개키 암호를 개발했는데, 이것은 오늘까지도 널리 사용되는 공개키 암호 방식이다.

 

 

 

   2.  암호 소개 

1.     대칭키

 

A.     대칭키 암호


대칭키 암호(Symmetric-key cryptosystem) 방식에서는 암호화에 사용되는 암호화키와 복호화에 사용되는 복호화키가 동일하다는 특징이 있으며, 이 키를 송신자와 수신자 이외에는 노출되지 않도록 비밀리 관리해야 한다. 우리가 일반적으로 사용하는 암호라는 의미로 관용 암호라고도 하며 키를 비밀리에 보관해야 한다는 의미로 비밀키 암호(Secret-key cryptosystem) 라고도 한다.
이 방식은 고대 암호로부터 연결된 오랜 역사를 가지고 있다.  대칭키 암호는 암호화 연산 속도가 빨라서 효율적인 암호 시스템을 구축할 수 있다.
이 암호 방식은 알고리즘의 내부 구조가 간단한 치환과 전치의 조합으로 되어 있어서 알고리즘을 쉽게 개발할 수 있고, 컴퓨터 시스템에서 빠르게 동작한다. 그러나 송,수신자 간에 동일한 키를 공유해야 하므로 많은 사람들과의 정보 교환 시 많은 키를 생성, 유지 관리해야 하는 어려움이 있다.
이러한 대칭키 암호 방식은 데이터를 변환하는 방법에 따라 블록 암호 와 스트림 암호로 구분된다.

 

                         i.         블록 암호 (Block crypto)
블록 암호는 고정된 크기의 블록 단위로 암,복호화 연산을 수행하며 각 블록의 연산에는 동일한 키가 이용된다. Shannon의 암호이론에 의하면 전치와 환자를 반복시켜 암호화하면 평문의 통계적 성질이나 암호 키와의 관계가 나타나지 않아 안전한 암호를 구성할 수 있다.
이러한 성질을 이용하여 Feistel은 전치와 환자를 반복 적용한 Feistel Network 방식의 암호 알고리즘을 설계하였는데, DES 알고리즘이 대표적인 예이다.

 

1.      DES(Data Encryption Standard)
DES
는 대칭키 암호 중 하나인 64-bit block 암호이며 56-bit 비밀키를 사용한다.
DES
의 해독이 가능함이 점점 다가옴에 따라 새로운 블록 암호 표준 AES의 개발 사업으로 이어짐.

 

2.      AES(Advanced Encryption Standard)
AES
는 미국 표준 암호였던 DES의 안전성에 문제가 제기됨에 따라 2000년 새로운 미국 표준 블록 암호로 채택된 128-비트 블록 암호이다.
이 알고리즘은 128/192/256-bit 키 길이를 제공하고 라운드 수는 키 길이에 따라 각각 10, 12, 14 이다.

 

3.      SEED
SEED
는 전자 상거래, 금융, 무선 통신 등에서 사용되는 개인 정보와 같은 중요한 정보를 보호하기 위해 1999 2월 한국인터넷진흥원과 국내 암호 전문가들이 순수 국내 기술로 개발한 128-비트 블록 암호이다. 1999 128-비트 비밀키를 지원하는 SEED 128이 개발되었으며, 암호 알고리즘 활용성 강화를 위해 2009 256-비트 비밀키를 지원하는 SEED 256이 개발되었다.

 

4.      HIGHT(HIGh security and light weight)
HIGHT
RFID , USN 등과 같이 저전력 경량화를 요구하는 컴퓨팅 환경에서 기밀성을 제공하기 위해 2005 KISA, ETRI 부설 연구소 및 고려대가 공동으로 개발한 64-비트 블록 암호이다.

 

                        ii.         스트림 암호


스트림 암호는 블록 단위로 암복호화되는 블록 암호와는 달리 이진화된 평문 스트림과 이진화된 평문 스트림과 이진 키스트림 수열의 XOR 연산으로 암호문을 생성하는 방식이다.
이러한 스트림 암호는 키스트림 수열이 평문과 관계없이 생성되어 동기식으로 사용해야만 하는 동기식 스트림 암호 와 키스트림 수열이 평문 혹은 암호문으로부터의 함수 관계에 의해 생성되기 때문에 복호화 시 동기가 흐트러졌더라도 스스로 동기화가 이루어져서 복호화가 가능한 자기 동기식 스트림 암호가 있다.
1970
년대부터 유럽을 중심으로 발달한 스트림 아호는 주기, 선형 복잡도 등 안전성과 관련된 수학적 분석이 가능하고 알고리즘 구현이 쉬운 특징이 있으며, 군사 및 외교용으로 많이 사용되고 있다.
스트림 암호는 구현 여건이 제약되는 이동 통신 환경에서도 구현이 용이하여 이동 통신 등의 무선 데이터 보호에 많이 사용된다.

 

1.      A5/1 , A5/2 , A5/3
GSM(Global System for Mobile communication)
은 유럽 국가를 기준으로 하여 중국,러시아, 인도 등 세계적으로 널리 채택되어 2004년 세계 이동 통신 가입자 중 70%이상이 사용하는 이동 통신 방식이다. A5/1 , A5/2, A5/3 GSM에서 데이터를 암복호화 할 때 사용되는 스트림 암호이다.
A5/1
OECD에 가입된 유럽 국가에서만 사용되는 알고리즘이고, A5/2 OECD에 가입되지 않은 국가에서 사용되는 알고리즘이다. A5/3 A5/1 A5/2의 안전성이 취약한 것으로 드러나면서 , 이들을 대신하여 사용하기 위해 개발된 알고리즘이다.

 

B.      비대칭키

 

                         i.         공개키 암호(Public-key cryptosystem)


공개키 암호는 비밀키 암호와 달리 송신자와 수시자가 다른 키를 사용하여 비밀 통신을 수행한다. 송신자는 수신자의 공개키에 해당하는 정보를 사용하여 데이터를 암호화하여 네트워크를 통해 전송한다. 수신자는 자신의 공개키에 해당하는 비밀키로 암호화된 데이터를 복호화하여 평문을 복원한다.


공개키 암호는 다른 유저와 키를 공유하지 않더라도 암호를 통한 안전한 통신을 한다는 장점을 갖는다. 각 사용자는 자신에게 전송하기 위해 사용될 키를 공개하고, 공개된 키 정보로 암호화된 정보를 복호화할 수 있는 키를 비밀로 보유하고 있음으로써 누구나 암호화 할 수 있지만 공개키에 대응되는 비밀키를 가진 당사자만 복호화 할 수 있는 특징을 가진다. n명의 사용자로 구성된 네트워크를 고려하면 각 사용자는 공개키와 비밀키 두 개를 보유하고 있으므로 네트워크 전체적으로 2n개의 키가 요구 된다. 그리고 각 유저는 2개의 키만 보유하고 있으면 된다.

공개키 암호는 수학적인 난제를 기반으로 설계되어 있고, 암호화나 복호화를 수행하기 위한 연산이 복잡한 수학 연산을 기반으로 구성되기 때문에 효율성은 비밀키 암호에 비해 높지 않다.
공개키 암호의 경우에는 모두가 확인할 수 있는 공개키에 대응되는 비밀키가 각 사용자만 알고 있는 정보이기 때문에 광범위한 인증 기능이 제공된다.

 

1.      RSA(Rivest, Shamir and Adleman)
RSA[25]
는 공개키 암호 시스템으로 암호화와 인증에 사용된다. RSA는 일반 정수론적인 면에서 정의되었다. 이 시스템은 큰 수의 인수분해의 어려움에 안전성을 두고 있다. 전자 서명의 길이는 RSA 시스템에서의 키 길이와 같다. RSA 시스템을 깨는 문제가 인수분해 문제로 귀결된다는 완전한 수학적 증명의 부족과 인수분해 문제가 NP-hard 임에도 불구하고, RSA 는 수많은 국제기구의 표준일 뿐만 아니라 산업 표준으로 권장되고 있다.

 

2.      ELGamal
이산 대수 문제의 어려움에 기반을 둔 최초의 공개키 암호 알고리즘인 ElGamal[26] 1984년 스탠퍼드 대학의 암호 학자 T. ElGamal에 의해 제안되었다. ElGamal으로 암호화하면 메시지의 길이가 두 배로 늘어나는 특징이 있다. 하지만 암호화할 때 난수를 이용하므로 같은 메시지에 대해 암호화하여도 암호화할 때마다 서로 다른 암호문을 얻게 되는데, 이것은 정보보호 측면에서 큰 장점이 된다. RSA에서는 난수를 사용하지 않기 때문에 같은 메시지에 대한 암호문은 항상 같다는 특징이 있는데, 이것은 공격자가 암호문을 복호화하지 않고도 평문을 추측할 수 있는 단점이 된다. 그러므로 실제 적용 시 RSA는 난수를 사용하는 OAEP(Optimal Asymmetric Encryption Padding)이라는 난수화 패딩 알고리즘과 함께 사용된다.

 

3.     ECC(Elliptic Curve Cryptosystem, 타원 곡선 암호 시스템)

 

4.     전자 서명 (Digital signature)

                       ii.         해쉬 함수


해쉬 함수는 임의의 길이를 갖는 메시지를 입력 받아 고정된 길이의 해쉬값을 출력하는 함수이다. 암호 알고리즘에는 키가 사용되지만, 해쉬 함수는 키를 사용하지 않으므로 같은 입력에 대해서는 항상 같은 출력이 나오게 된다. 이러한 함수를 사용하는 목적은 입력 메시지에 대한 변경할 수 없는 증거값을 뽑아냄으로서 메시지의 오류나 변조를 탐지할 수 있는 무결성을 제공하는 목적으로 주로 사용된다.

해쉬 함수는 전자 서명과 함께 사용되어 효율적인 서명 생성을 가능하게 한다. 긴 메시지에 대해 서명을 하는 경우, 전체 메시지에 대해 직접 서명을 하는 것이 아니고 짧은 해쉬값을 계산해 이것에 대해 서명을 하게 된다. 공개키 연산은 많은 계산량을 필요로 하기 때문에 전체 메시지를 공개키 길이의 블록 단위로 나누어 모든 블록에 대해 서명을 하는 것은 매우 비효율적이다. 그러므로 먼저 메시지를 입력 받아 짧은 해쉬값을 계산하고, 이것에 대해 한 번의 서명 연산을 하는 것이다. 이 계산값은 원래의 메시지에 대한 서명으로 인정된다.

해쉬값에 대한 서명이 원 메시지에 대한 서명으로 인정되기 위해서는 같은 해쉬값을 갖는 또 다른 메시지를 찾아내기가 계산적으로 어려워야 한다. 해쉬 함수는 임의의 길이의 입력으로부터 짧은 길이의 해쉬값을 출력하므로 입력은 서로 다르지만 같은 출력을 내는 충돌이 반드시 존재한다. 만일 같은 해쉬값을 갖는 다른 메시지를 찾아내기가 쉽다면, 서명자는 자신의 서명에 대해 다른 메시지에 대한 서명이라고 우길 수 있을 것이다. 이것이 가능하다면, 전자 서명에 대한 신뢰가 불가능하고 전자 거래에 사용할 수 없게 될 것이다. 그러므로 안전한 해쉬 함수로 사용될 수 있기 위해서는 충돌을 찾아내기 어렵다는 특성을 가져야 한다.

한편, 해쉬 함수는 전자 서명에 사용된다고 했는데, 이것은 서명자가 특정 문서에 자신의 개인키를 이용하여 연산함으로서 데이터의 무결성과 서명자의 인증성을 함께 제공하는 방식이다. 메시지 전체에 대해 직접 서명하는 것은 공개키 연산을 모든 메시지 블록마다 반복해야 하기 때문에 매우 비효율적이다. 따라서 메시지에 대한 해쉬값을 계산한 후, 이것에 대해 서명함으로서 매우 효율적으로 전자 서명을 생성할 수 있다. 서명자는 메시지 자체가 아니라 해쉬값에 대해 서명을 하였지만 같은 해쉬값을 갖는 다른 메시지를 찾아내는 것이 어렵기 때문에, 이 서명은 메시지에 대한 서명이라고 인정된다.

송신자의 신분에 대한 인증이 필요 없고, 데이터가 통신 중 변조되지 않았다는 무결성만이 필요한 경우에는 해쉬 함수를 메시지인증코드(MAC, Message Authentication Code)라는 형태로 사용할 수 있다. 송신자와 수신자가 비밀키를 공유하고 있는 경우, 송신자는 메시지와 공유된 비밀키를 입력으로 하여 해쉬값을 계산하면 메시지인증코드가 된다. 메시지와 함께 메시지인증코드를 함께 보내면 수신자는 메시지가 통신 도중 변조되지 않았다는 확신을 가질 수 있다.

1.     SHA(Secure Hash Algorithm)


최조의 알고리즘은 1993년 미국 국가 안전 보장국(NSA)이 설계하였으며, 미국 표준 기술 연구소(NIST)에 의해 SHS(Secure Hash Standard, FIPS PUB 180)으로 출판되었으며, 다른 함수들과 구별하기 위해 보통 SHA-0으로 불린다. 2년 후 SHA-0의 압축 함수에 비트 회전 연산을 하나 추가한 SHA-1(FIPS PUB 180-1)이 발표되었으며, 그 후에 4종류의 변형, SHA-224, SHA-256, SHA-384, SHA-512(FIPS PUB 180-2)가 추가로 발표되었다. 이들을 통칭해서 SHA-2라고 하기도 한다. SHA-1 SHA 함수들 중 가장 많이 쓰이며, TLS, SSL, PGP, SSH, IPSec 등 많은 보안 프로토콜과 프로그램에서 사용되고 있다. 하지만 최근 SHA-0 SHA-1에 대한 분석 결과가 발표됨에 따라 SHA-2를 사용할 것이 권장되고 있다.

2.      HAS-160


국내에서 개발된 대표적인 해쉬 함수인 HAS-160[28] 2000 12월 국내 해쉬 함수 표준(TTAS.KO-12.0011/R1)으로 채택되었다. HAS-160의 설계 원리는 SHA-1의 설계 사상이 유사하지만, 메시지 확장 과정이 기존의 MD계열 해쉬 함수와는 차이가 있어, 최근 제안된 다양한 해쉬 함수 분석 기법에 대하여 아직까지는 안전성을 갖고 있다.

3. 국산 암호

1.     SEED 암호 알고리즘

SEED는 전자상거래, 금융, 무선통신 등에서 전송되는 개인정보와 같은 중요한 정보를 보호하기 위해 1999 2월 한국인터넷진흥원과 국내 암호전문가들이 순수 국내기술로 개발한 128비트 블록 암호 알고리즘입니다. 1999년에는 128비트 키를 지원하는 SEED 128을 개발하였으며, 암호 알고리즘 활용성 강화를 위해 2009 256 비트 키를 지원하는 SEED 256을 개발하였습니다.

2.     HIGHT 암호 알고리즘

HIGHT 암호 알고리즘 HIGHT(HIGh security and light weigHT) RFID, USN 등과 같이 저전력ㆍ경량화를 요구하는 컴퓨팅 환경에서 기밀성을 제공하기 위해 2005 KISA, ETRI 부설연구소 및 고려대가 공동으로 개발한 64비트 블록암호 알고리즘입니다.

 

3. ARIA ( Academy , Research Institute , Agency)

    

ARIA는 경량 환경 및 하드웨어에서의 효율성 향상을 위해 개발되었으며, ARIA가 사용하는 대부분의 연산은 XOR과 같은 단순한 바이트 단위 연산으로 구성되어 있습니다. ARIA라는 이름은 Academy(학계), Research Institute(연구소), Agency(정부 기관)의 첫 글자들을 딴 것으로, ARIA 개발에 참여한 학·연·관의 공동 노력을 표현하고 있습니다.

 

잘 모르겠지만.. 이런것을 자주 사용하니.. 알고 있도록.

'BASIC' 카테고리의 다른 글

데이터 탐색을 위한 유용한 유닉스 명령들  (0) 2014.09.01
UML 과 방법론의 차이  (1) 2013.07.30