티스토리 뷰

출처 : https://kldp.org/node/157451

 

aes 알고리즘 : 128 이중 암호화 vs 256 한번 암호화 -> 뭐가 더 강력할까요? | KLDP

aes를 이용하여 128비트로 두번 암호화한 내용과 256비트로 한번만 암호화한 내용 중 어떤 것이 더 강력할까요?

kldp.org

 

대개의 경우, 128 단일 암호화만 가지고도 충분합니다.

http://csrc.nist.gov/groups/ST/toolkit/documents/aes/CNSS15FS.pdf
2003년의 CNSS Policy에 따르면 SECRET level까지는 AES 128만으로 충분하고, TOP SECRET은 AES 192 혹은 AES 256을 쓰라고 나와 있군요.

그럼에도 불구하고 AES 128 가지고는 만족을 못 하시겠다면, 보안 시스템의 강도는 가장 약한 요소에 의해 결정된다는 사실을 유념할 필요가 있습니다. 그리고 그 약한 요소는 대개의 경우 암호화 알고리즘이 아닙니다.

암호화 키를 부주의하게 다루거나, 부적절한 mode of operation을 사용하거나, 암호화 시스템을 이루는 소프트웨어에 취약점이 있거나 하는 게 대체로 보안을 약화시키는 결정적인 요소이지요. 저 학부 때 암호론 교수님께서는 반쯤 농담으로 "cryptoanalysis 방법은 다양하게 있지만 가장 practical하고 싸게 먹히는 방법은 key buying attack이다. 암호화 키를 아는 놈을 매수하는 거지. 슈퍼컴퓨터로 암호를 깨는 비용보다 훨씬 싸게 먹힌다"고 말씀하시곤 했지요. 실제로 보안 시스템의 가장 약한 요소가 사람인 경우가 드물지 않게 있어요. 강의 시간에 언급하기에는 다소 부적절하지만, 조금 더 형량이 센 위법행위라도 저지를 수 있다면 Rubber-hose cryptanalysis를 이용할 수도 있지요.

https://xkcd.com/538/

https://en.wikipedia.org/wiki/Rubber-hose_cryptanalysis

그런 경우에는 AES 128을 단일에서 이중으로 적용하거나 AES 256으로 업그레이드하는 일 따위로는 보안을 조금도 강화하지 못한다는 말씀입니다. 그저 눈에 띄는 숫자에만 주목하는 스펙놀음일 뿐이죠. 실제로 안전한 보안 시스템을 구성하는 건 소위 전문가들에게도 쉬운 일이 아니고, 상당한 시간과 노력을 들여 검증을 거쳐야 하는 문제입니다.

가장 쉬운 방법은 그냥 널리 알려져 검증을 거친 오픈소스를 가져다 쓰세요. openpgp 같은 것 있잖아요. 그럼에도 불구하고 어떻게든 직접 구현하셔야겠다 싶으시면, 최소한 AES를 쓰실 때는 mode of operation 정도는 아셔야 합니다.

https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation

 

Block cipher mode of operation - Wikipedia

From Wikipedia, the free encyclopedia Cryptography algorithm "Mode of operation" redirects here. For "method of operation", see Modus operandi. In cryptography, a block cipher mode of operation is an algorithm that uses a block cipher to provide informatio

en.wikipedia.org

 

 

옛날에 DES라는 블록암호 표준이 있었는데, 그게 키 길이가 너무 작아서 안전성에 문제가 있었죠. 그래서 키 길이를 늘이기 위해 나온 아이디어가 여러번 다른 키로 암호화하는 겁니다. 실제로 표준으로 채택된 것은 triple DES, 즉, 3번 암호화하는 건데, 두 번 짜리가 채택되지 않은 이유는, 두 번 다른 키로 암호화하는 경우 meet-in-the-middle 공격이 하나 있어서 실질적인 키 길이가 두 배로 늘어나지 않기 때문입니다. 실질적으로는 키 길이가 한 비트 정도 더 늘어나는 선에서 그칩니다. 암호학 교과서들을 찾아보면 대체로 있는 얘깁니다.

AES라고 해도 이야기는 그리 다르지 않습니다. 기본적으로는, AES128을 두 번 반복하는 것은 별 의미가 없고 그냥 AES256을 쓰는 것이 낫습니다,

 

 

시간이 좀 된 질문이긴 한데.. 제가 생각하는 답변이 안보여서 답변드립니다.

첫째로 살펴볼 점은 암호화 알고리즘의 보안성을 고려할 때는 암호화 알고리즘 자체는 일반적으로 공개된다는 전제하에 계산됩니다. 따라서 공격자는 암호화 알고리즘 즉, AES128를 2번 사용했다는 걸 이미 공격전에 인지하고 있다는 가정이 필요합니다.


위의 사실은 인지 한 상태에서, AES-128을 사용한 메세지에 무차별 대입법을 사용한 키복구 공격을 하려면 필요한 계산력은 약 2^128입니다. (실제로는 2^126 정도에 푸는 알고리즘이 있다고 합니다) AES-128을 2번 사용한걸 공략하려면 결과적으로 연산에 2배의 시간이 걸리므로 단순계산으로 보안성이 최대 2배까지 증가할 수 있습니다.

반면 같은 방법으로 AES-256를 공략하기 위해서는 약 2^256의 계산력이필요합니다. 즉 수학적으로만 따져봤을때 AES-128를 100번 하던 1000번하던 AES-256 한번이 훨씬 더 강력 합니다.

"다만 256의 경우 키가 2배이기는 하지만, 한번의 암호화만 풀면 평문이 존재할 수 있을텐데 그럼에도 얼마나 더 견고할까?하는 궁금함 때문이었습니다."
-> AES-256을 공략해서 평문을 한번 얻는게 AES-128보다 훨씬 어렵기 때문에 이론상 전혀 걱정할 이유가 없습니다. (약 2의 128승배 어렵습니다.)

다만 위의 계산은 무차별 대입법을 기준으로 보안성을 계산한 것이고, AES 알고리즘을 공략하는 다른 방법이 존재할 수있습니다. 예를들면 AES 알고리즘을 대상으로 하는 연관키 공격이라는게 있습니다. 키를 생성하는 키 스케쥴러를 공략하는 방법으로 이건 오히려 키 길이가 길 수록 공격에 더 취약합니다. 어쨌든 위에 답변이 달린것 처럼 알고리즘을 직접 공략하는 방법이 발견이 아직 안된 것일 뿐, 직접 공략하는 방법이 없다고 증명된게 아니기 때문에 답변은 오직 "현재까지 알려진 공략법"에 근거하는 수밖에 없습니다.

수학적인 것보다 보다 현실적인 답변으로는, AES 알고리즘 자체를 공략하는건 불가능하고 AES 키 길이보다는 키 보관 따위가 더 중요하다는 것이죠. 그런 의미에서 AES-128로 2번 암호화 시키는게 의미가 있을 수는 있습니다. 실제로 미 국가안보국에서는 통신에 암호화를 두번씩 합니다. 같은 알고리즘을 두번 연속 적용하는 것은 아니고, 서로 다른 알고리즘을 서로 다른 레이어에서 적용하도록 되어있습니다.

 

 

 

결론 : AED-256 쓰자. 키관리가 중요.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함