습관처럼

암호화 알고리즘 종류 본문

CS/보안

암호화 알고리즘 종류

dev.wookii 2020. 3. 18. 15:46

블록 암호

블록 암호(Block Cipher)란 평문을 블록 단위로 암호화하는 대칭키 암호 시스템입니다. 대칭키 암호 시스템은 암호화와 복호화를 할 때 동일한 키가 사용되는 암호 시스템입니다. 반대로 암호화와 복호화를 할 때 동일하지 않은 키가 사용되지 않는 공개키 암호 시스템도 존재하는데, 공개키 암호 시스템 보다는 대칭키 암호 시스템이 우리의 직관과 조금 더 맞는 시스템일 것입니다. 

 

블록 단위로 암호화를 한다는 의미는 암호화 방식을 정할 때 임의의 길이의 평문에 대해 고민할 필요가 없이 고정된 길이의 각 블록을 암호화하는 방식만 정하면 됩니다. 대표적인 블록 암호로는 DES, AES가 있고 DES는 블록의 크기가 64비트, AES는 128/192/256비트입니다.

DES

DES(Data Encryption Standard)는 64비트 블록 단위를 암호화하는 알고리즘으로, 1975년에 IBM에서 개발했고 1979년에 미국에서 국가 표준으로 지정되었습니다. DES 알고리즘에서 활용되는 키는 56비트이고 암호를 만들 당시에는 충분한 길이였으나 컴퓨터의 성능이 점차 개선됨에 따라 DES는 자체적인 취약점이 발견되지 않았음에도 불구하고 키가 짧아 2016년에 들어서는 GeForce GTX 1080 Ti GPU로 모든 키를 30일 이내에 확인할 수 있는 상황이 되어 더 이상 제 기능을 할 수 없는 암호 알고리즘이 되었습니다.

3DES

DES는 1997년 RSA Security에서 제시한 DES Challenges가 깨지고, 1998년 DES에 최적화된 하드웨어로 56시간만에 키를 찾는 등의 일이 계속 발행하면서 대체할 필요성이 제기되었습니다. 그로 인해 1997년 NIST는 DES를 대체할 AES(Advanced Encryption Standard)를 공모하지만, AES가 선정되기 전까지 임시로 DES를 변형해 3DES를 만들어 더 안전하도록 만들었습니다. 3DES는 DES의 서로 다른 키 3개를 정해 DES를 3번 수행하는 알고리즘입니다.

 

구체적으로 키 에 대해 입니다. 굳이 에 대해  대신 를 하는 이유는 3DES를 이용해 DES를 키 로 암호화하고 싶을 때 를 모두 로 두면 되므로 backward compatibility를 제공하기 위해서입니다. 이를 통해 키의 길이를 56비트에서 168비트로 늘이는 효과를 낼 수 있습니다. 그러나 3DES를 공격하는 시간복잡도가 로 늘어나지는 않고 대략  정도입니다. 이는 MITM(Meet In The Middle Attack) 때문입니다. 2DES가 DES에 비해 그다지 안전하지 않은 이유 또한 2DES는 키의 길이가 2배이지만 MITM으로 인해  정도로밖에 시간복잡도가 늘지 않기 때문입니다. MITM에 대한 자세한 설명은 생략하겠습니다.

 

3DES는 DES를 3번 적용하기 때문에 속도가 느리고 뒤에 소개할 AES보다 덜 안전하지만, DES만큼 개인이 하루 내로 키를 복원할 수 있는 정도는 아니기 때문에 Microsoft Outlook, Firefox, OpenSSL 등에서도 3DES는 여전히 사용할 수 있습니다.

AES

AES는 DES가 더 이상 안전하지 않게 되면서 NIST가 주최한 공모전에서 선정된 Rijndael 알고리즘입니다. AES는 공모전에 출품된 수많은 후보 중에서 안전한 정도, 속도, 소프트웨어/하드웨어 퍼포먼스 등을 종합적으로 고려해 선정된 알고리즘이고 현재까지도 Full Round에 대해서는 전수조사보다 겨우 4배정도 빠른 방법만이 찾아졌을 뿐 밝혀진 효과적인 공격이 없기 때문에 안전합니다.

 

DES가 Feistel 구조를 사용한 것과 같이 AES는 SPN(Substitution-Permutation Network) 구조를 사용합니다. SPN 구조는 별다른게 아니라 Substitution과 Permutation을 여러 라운드에 걸쳐 적용하는 구조입니다. Substitution과 Permutation은 고전 암호에서도 찾아볼 수 있는 기법이기에 SPN 구조가 과연 안전한가 의문이 들 수도 있지만 중간에 키를 XOR해가며 여러 라운드에 걸쳐 사용하면 굉장히 공격하기가 어려운 구조가 만들어집니다. AES는 블록 크기가 16바이트로 이를 의 이차원 행렬로 만들어 Substitution과 Permutation을 수행합니다. 

공개키 암호

공개키 암호는 대칭키 암호의 키 전달에 있어서 취약점을 해결하고자 한 노력의 결과로 탄생한 암호 방식입니다. 공개키 암호는 한 쌍의 키가 존재하며, 하나는 특정 사람만이 가지는 개인키(또는 비밀키)이고 다른 하나는 누구나 가질 수 있는 공개키입니다.

 

개인키로 암호화 한 정보는 그 쌍이 되는 공개키로만 복호화 가능하고, 반대로 공개키로 암호화 한 정보는 그 쌍이 되는 개인키로만 복호화가 가능합니다. 즉 공개키 암호 방식은 암호화할 때 사용하는 암호키와 복호화할 때 사용하는 암호키가 서로 다르기 때문에 비대칭키 암호라고도 합니다. 공개키 암호는 키 전달 문제를 해결했지만 암호화, 복호화를 위해 복잡한 수학연산을 수행하기 때문에 대칭키에 비해 속도가 느립니다. 대칭키 암호의 장점과 공개키 암호의 장점을 채택하여 용량이 큰 정보는 대칭키로 암호화하고, 암호화에 사용된 대칭키는 공개키로 암호화하여 대상에게 전달하는 하이브리드 암호화 방법이 일반적으로 활용되고 있습니다.

RSA

RSA란? RSA는 대표적인 공개키 암호로서 Diffie와Hellman의 공개키 암호 개념을 기반으로MIT공대 연구팀 소속의 세 학자Rivest, Shamir, Adleman에 의해 탄생되었고, RSA이름은 세 학자 이름의 머리글자를 따서 만든 명칭입니다. RSA는 큰 수의 소인수분해가 매우 어렵다는 것을 기반으로 만들어 졌습니다. 즉 n=p*q일 때, p와 q로 n을 구하기는 쉬우나 n으로 p와 q를 찾기 힘들다는 소인수분해의 어려움을 이용하였습니다.   RSA 알고리즘 RSA 알고리즘을 확인하기 전에 RSA 알고리즘에서 사용하는 표기법에 대해 알아보겠습니다. RSA 알고리즘에서 사용하는 표기법은 다음과 같습니다.

ECC

블록체인을 공부하다 보면 자주 접하는 암호화 알고리즘이다. 암호키의 길이가 길면 보안은 강화되지만 속도가 느려진다. 그런데 ECC(Elliptic Curve Cryptography)를 사용하면 짧은 키로 동일한 암호성능을 가지는데, 컴퓨터의 성능이 낮아도 암호 성능을 유지할 수 있게되었다.

 

이러한 이유로 RSA를 대체할 차세대 공개키 암호기술로 부상하고 있다. 타원 곡선 암호화(Elliptic Curve) 알고리즘으로 불리며, 공개키 암호화 방식이다. ECC는 RSA암호방식에 대한 대안으로 1985년도에 제안된 방식입니다. 암호키의 길이(bit수로 표시)가 길면 보안(암호 해독에 소요되는 시간이 아주 많이 필요함)은 강화 되지만, 암호연산 속도가 느려지게 때문에, 보안을 강화하기 위해, RSA방식을 사용하며 암호키 길이를 늘리는 대신에, ECC 방식을 사용하는 추세에 있습니다. 

 

즉 ECC를 사용하면, 적은 bit수의 암호키로 동일한 암호성능(암호 해독에 소요되는 시간)을 나타내기 때문입니다. 예를 들면, 3072-bit RSA 와 256-bit ECC의 암호성능이 동일하다고 합니다.  bit수가 적으면 연산이 보다 빠르게 처리될 수 있기 때문에 암호연산 성능이 좋아집니다. 다른 관점에서 이야기하면, 암호연산 장치의 CPU성능이 낮아도, 암호성능을 유지할 수 있다는 것입니다.

암호학적 해쉬함수

암호화 해시 함수(cryptographic hash function)은 해시 함수의 일종으로, 해시 값으로부터 원래의 입력값과의 관계를 찾기 어려운 성질을 가지는 경우를 의미한다. 암호화 해시 함수가 가져야 하는 성질은 다음과 같다. 가장 널리 사용되는 해시 함수에는 MD5와 SHA-1이 있으나, 이들은 안전하지 않다는 것이 알려져 있다. 미국 US-CERT에서는 2008년 MD5를 사용하지 말아야 한다고 발표했다. NIST에서는 2008년 SHA-1의 사용을 중지하며 SHA-2를 사용할 것이라고 발표했다.

MD5

MD5(Message-Digest algorithm 5)는 128비트 암호화 해시 함수이다. RFC 1321로 지정되어 있으며, 주로 프로그램이나 파일이 원본 그대로인지를 확인하는 무결성 검사 등에 사용된다. 1991년에 로널드 라이베스트가 예전에 쓰이던 MD4를 대체하기 위해 고안했다.

 

1996년에 MD5의 설계상 결함이 발견되었다. 이것은 매우 치명적인 결함은 아니었지만, 암호학자들은 해시 용도로 SHA-1와 같이 다른 안전한 알고리즘을 사용할 것을 권장하기 시작했다. 2004년에는 더욱 심한 암호화 결함이 발견되었고. 2006년에는 노트북 컴퓨터 한 대의 계산 능력으로 1분 내에 해시 충돌을 찾을 정도로 빠른 알고리즘이 발표 되기도 하였다. 현재 MD5 알고리즘을 보안 관련 용도로 쓰는 것은 권장하지 않으며, 심각한 보안 문제를 야기할 수도 있다. 2008년 12월에는 MD5의 결함을 이용해 SSL 인증서를 변조하는 것이 가능하다는 것이 발표되기도 했다.

SHA

미국 국가 안전 보장국 (NSA)에서 개발하였습니다. 1993년에 최초 개발된 함수는 SHA-0로, 후에 SHA-0를 변형한 함수는 SHA-1으로, 그 후에 발표된 SHA-224, SHA-256, SHA-384, SHA-512를 묶어서 SHA-2 라고 합니다.  SHA-1이 가장 많이 쓰이며, TLS 및 SSL, IPSec에서 사용합니다.  SHA-0과 SHA-1는 최대 160bit의 고정길이로 요약하고, SHA-2는 사용 함수의 뒤 숫자 만큼 가능합니다. SHA는 MD5보다는 느리지만, 강화된 보안을 제공하므로 많이 사용합니다.

 

헤쉬된 Verification Data 또는 MAC은 복호화가 되지 않으므로 수신자는 원문을 같은 방법으로 헤쉬합니다. 그래서 헤쉬된 값을 비교하여 결과를 확인합니다.

 

'CS > 보안' 카테고리의 다른 글

오토런 바이러스  (0) 2020.05.29
국제공통평가기준 (Common Criteria, CC)  (0) 2020.05.29
시스템 보안 - LSA, SAM, NTLM, SRM  (0) 2020.05.29
보안 - 비공개 키 & 공개 키 암호화  (0) 2020.02.29