ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • AES
    보안 & 보안 2016. 7. 21. 09:33

    Advanced Encryption Standard, 줄여서 AES라고 흔히 불린다. 높은 안전성과 속도로 인해 인기를 얻어 전세계적으로 많이 사용되고 있다. AES를 위한 암호화 알고리즘은 레인달 알고리즘이 뽑혔다. 이후 2001년 2월 28일, 기밀문서를 암호화 할 때, DES를 대체하여 많이 사용되기 시작되었다.

    알고리즘

     AES암호화에 사용되는 단계들이다.

    • S-Box

    • ShiftRows

    • MixColumns

    • AddRoundKey

    키 스케쥴다음, 가장 처음에 AddRoundKey로 CipherText를 암호화 시킨다. 그 다음, 위에 4 알고리즘을 CipherText에 적용한다. 비트크기에 따라 반복하는 수가 다르다. AES-128같은 경우는 9번, AES-192는 11번, 그리고 AES-256은 13번 반복한다. 4 알고리즘을 적용후, 마지막으로 S-Box, ShiftRows, 그리고 AddRoundKey를 적용한다.

    특징

    128-bit, 192-bit, 그리고 256-bit 키 길이로 처리한다. 128 비트일경우, 10 번 (마지막 라운드 함수를 포함하여) 라운드를 돌려 암호화 하고, 192 비트는 12번을 돌고, 256 비트 일경우, 14 번을 돈다.
    S-Box를 간단히 설명하자면 입력 데이터를 지정된 숫자로 바꿔서 암호를 깨기 어렵게 만드는 기법이다. AES는 이걸 창조롭게 재발명하여 암호화 속도를 높이고 싶으면 S-Box를 메모리에 박아놓고, 프로그램 메모리 양을 줄이려면 실행시 S-Box를 연산으로 구해내는 기법을 사용했다. 

    프로그래밍 언어

    자바 : API에 java.security 패키지와, javax.crypto 패키지를 사용하여 AES 암호화를 사용할 수 있다.
    C/C++ : 기본 라이브러리에는 없는 듯 하다. 3rd Party Software나, 다른 API는 구글에 검색을 해서 얻을 수 있음
    C# : System.Security.Cryptography 네임스페이스와 System.Security.Cryptography.Aes 클래스를 사용하면 된다.
    Python : Crypto 모듈에서 지원한다.
    Go : "crypto/aes" 패키지를 이용하면 된다.

     안정성

    미국 정부가 채택하여 기밀문서를 암호화를 했다. 즉, 정부가 믿을 정도라는 것이다. 그러나, 몇번은 공격을 받은듯 하다. 솔직히 AES의 알고리즘은 은근히 간단한 수학 공식이다. 암호화하는 게 쉽다고 깨는게 쉬운 건 아니지만 말이다. 물론 절대로 프로그램이나, 암호화를 공격하여 해킹을 막는 방법은 절대로 존재하지 않았고, 존재하지 않고, 앞으로도 존재할수가 없다. 다만, 공격을 하는 시간을 늘리고, 더 까다롭게 하는 것 밖에 못한다. 그러나 아직은 AES가 최강의 암호화 이고, 당장은 키없이 해독하는것을 거의 불가능하다고 믿어지고 있다. 심지어, 다른 최신 cipher 와 마찬가지로, known-plaintext 해킹기술로도 해독이 불가능 하다고 한다.

    댓글