2011-02-11 5 views
0

그래서 우리 모두는 고정 길이가 128 비트 또는 192 비트 또는 256 비트임을 동의합니다. 우리의 컨텍스트가 50 바이트 (바이트) % 16 = 2 바이트 인 경우. 그래서 우리는 컨텍스트를 3 번 ​​암호화하지만, 나머지 2 바이트는 State 블록에 어떻게 저장 될 것입니다. 나는 그것들을 덧씌우면, 표준은 그러한 조건들을 다루는 방법을 명시하지 않는다.AES 제한 및 MixColumn

MixColumns 단계는 AES에서 가장 복잡한 측면이지만 수학 표현을 이해할 수 없었습니다. 행렬 곱셈에 대한 이해가 있지만 수학적 결과에 놀랐습니다. 값에 2를 곱하면 리틀 엔디안 1 위치에서 왼쪽으로 시프트하고 빅 엔디안에서 오른쪽으로 시프트합니다. 가장 중요한 비트가 1 (0x80)로 설정 되었다면 0x1B로 시프트 된 결과를 XOR해야합니다. 나는 3을 곱하면 값 2의 위치를 ​​이동시키는 것을 의미한다고 생각했습니다.

C 구현을 제공하는 튜토리얼 인 위키 백과에서 다양한 출처를 확인했습니다. 하지만 내 자신의 구현을 완성하는 데 더 관심이 있습니다! 가능한 모든 입력 해 주셔서 감사합니다. 귀하의 질문에 대한 응답으로

+0

2 비트 씩 이동하려면 4를 곱하거나 나눕니다. –

+2

AES는 블록 암호 일뿐입니다. 실제 데이터를 암호화하려면 CBC (암호화 블록 연결) 또는 CTR (카운터 모드)과 같이 적절한 _mode_를 선택해야합니다. CBC는 블록 모드이므로 패딩에 적합한 방법을 찾아야합니다 (귀하에게 달려 있습니다). CTR은 스트림 모드이므로 모든 바이트 수를 암호화 할 수 있습니다. –

답변

1

혼합 열 단계에서 지수가 곱 해지고 있습니다.

take this example 
AA*3 
10101010*00000011 
is 
x^7+x^5+x^3+x^1*x^1+x^0 
x^1+x^0 is 3 represented in polynomial form 
x^7+x^5+x^3+x^1 is AA represented in polynomial form 
first take x^1 and dot multiply it by the polynomial for AA. 
that results in... 
x^8+x^6+x^4+x^2 ... adding one to each exponent 
then reduce this to 8 bits by XoRing by 11B 
11B is x^8+x^4+x^3+x^1+x^0 in polynomial form. 
so... 
x^8+x6+x^4+ x^2 
x^8+ x^4+x^3+ x^1+x^0 
leaves 
x^6+x^3+x^2+x^1+x^0 which is AA*2 
now take AA and dot multiply by x^0 (basically AA*1) 
that gives you 
x^7+x^5+x^3+x^1 ... a duplicate of the original value. 
then exclusive or AA*2 with AA*1 
x^7+ x^5+x^3+ x^1 
    x^6+ x^3+x^2+x^1+x^0 
which leaves 
x^7+x^6+x^5+x^2+x^0 or 11100101 or E5 
I hope that helps. 
here also is a document detailing the specifics of how mix columns works. 

mix_columns.pdf

편집 : 일반 행렬 곱셈 정상 행렬에 대해 잊지 ..so이 적용되지 않습니다.

+0

감사합니다. 2 주 이상 문제가 해결되었습니다. 내 자신의 다항식 승수 (함수)를 만들었습니다 – Nocturnal

1

:

  1. 당신이 AES를 사용하여 바이트 스트림을 암호화하려면, 그냥 개별 블록으로 그것을 깰와 개별적으로 암호화하지 않습니다. 이것은 암호로 보호되지 않으며 영리한 공격자는 원본 평문에서 많은 정보를 복구 할 수 있습니다. 이것을 electronic code book라고 부르며 링크를 따라 Tux Linux Penguin을 암호화 할 때 어떤 일이 벌어지는지를 보았을 때 그 불안정성을 시각적으로 볼 수 있습니다. 대신 cipher-block chaining (CBC) 또는 counter mode (CTR)과 같은 알려진 보안 기술을 사용하는 것이 좋습니다. 이것들은 구현하기에 약간 복잡하지만, 영리한 공격자가 간접적으로 암호화를 깨뜨릴 수 없도록 노력할 가치가 있습니다.

  2. MixColumns 스테이지가 어떻게 작동하는지에 관해서는, 나는 정말로 많은 작업을 이해하지 못합니다. 다항식의 필드가 포함 된 구조를 기반으로합니다. 어떻게 작동하는지에 대한 좋은 설명을 찾을 수 있다면 알려 드리겠습니다.

  3. 이해를 돕기 위해 AES를 구현하려는 경우, 완벽하게 문제가 없으며 그렇게 할 것을 권장합니다 (알고리즘의 출현에 대한 수학적 직관을 더 잘 읽는 것이 더 나을지 모르지만). 그러나 이 아니어야합니다.은 실제 암호화 용도로 직접 구현해야합니다. 극도의주의를 기울이지 않으면 구현을 보안을 손상시킬 수있는 side-channel attack에 취약하게 만듭니다. 가장 유명한 예로 RSA 암호화가 있습니다. RSA 암호화는주의 깊게 계획하지 않으면 공격자가 실제로 키의 비트를 복구하기위한 암호화 작업을 수행 할 때 컴퓨터의 전원 끌기를 볼 수 있습니다. AES를 사용하여 암호화를 수행하려면 알고리즘의 오픈 소스 구현을 테스트하고 사용하는 것이 좋습니다.

희망이 있습니다.

+0

당신의 연구 정보에 대한 귀하의 의견을 높이 평가해 주셨습니다. (머리가 위로 줘서 고마워요.)하지만 이미 성숙한 다른 라이브러리 덕분에 제 자신의 구현이 엉망이되었습니다. 필자의 초점은 다른 기존 코드 및 기능 (사용 편의성)과 함께 구현 정도에 전적으로 달려있다. SSL 라이브러리를 프로그래밍 중이며 SSL의 일부에는 AES를 구현하는 데 필요한 블록 및 스트림 암호가 필요하다. 나는 CS 졸업생이지만, 영어가 제 1 언어가 아니기 때문에 주제가 간신히 다루어지면 때때로 수학 표기법을 이해하기 어렵습니다. (모든 사례가 아님) – Nocturnal

+0

게다가 보안 전문가가 친구를 사주는데 누가 내 라이브러리를 괴롭히는 모든 취약점을 테스트 할 수 있도록 도와 줄 것입니다. – Nocturnal

0

당신은이 페이지를 확인 할 수 있습니다 자신의 구현의 결과 (계산 중에 내부 상태)를 테스트하려면 : 그것은 주어진 일반 텍스트에 대한 모든 내부 상태를 표시

http://www.keymolen.com/aes.jsp

, 키와 IV , 또한 mixcolumns 단계를 위해.

+0

감사합니다 브루노,하지만 이미 AES를 구현했습니다. 나는 또한 나 자신의 DES 버전을 구현했다. 나는 현재 예외를 위해 디버깅 중입니다. – Nocturnal