본문 바로가기

Secure Note

ADLER32

Adler-32. 이건 Mark adler가 만든 알고리즘으로 비트의 변형여부를 확인하는 체크섬 알고리즘중의 하나다.

일단 패킷 체크섬알고리즘에선 crc32가 많이 쓰이는데, 아들러도 같이 쓰이기도 하나보다.
(어떤 게임하나를 보니 adler32랑 crc32가 같이쓰였다.  대부분 이렇게 같이쓰는건지는 잘 모르겠다.)

Adler32가 어떤방식으로 데이터를 변형시키는지 한번 보자.(위키피디아를 보고 풀어쓴게 답니다.)

Adler32는 일단 32비트 인트타입으로 연쇄되는 16비트 체크섬값 두개가 필요하다.
(그냥 인트타입 변수 두개필요하다고 보시면 됩니다.)

그 둘을 A이랑 B라고 하면, A는 1로 초기화 하고, B는 0으로 초기화 한 후,
A는 데이터 스트링의 각 바이트들의 합 +1 이되고 B는 A가 스트링 바이트 하나하나 더해나갈 때, 그 A값들의 합이다.

그리고 두 체크섬은 65521이라는 값으로 모듈러연산을 한다.(65521은 2^16 까지의 prime중 가장 큰수입니다.)

마지막으로 계산된 A하고 B를 가지고,,,
B를 16비트 left shift한 후 A와 더하게 되는데, 이 값이 Adler-32체크섬값이 되는거다.

위키에 있는 수식을 가져오면, 

A = 1 + D1 + D2 + ... + Dn (mod 65521)
 B = (1 + D1) + (1 + D1 + D2) + ... + (1 + D1 + D2 + ... + Dn) (mod 65521)
   = n×D1 + (n-1)×D2 + (n-2)×D3 + ... + Dn + n (mod 65521)

 Adler-32(D) = B × 65536 + A
아주 간단 명료하게 설명해주고 있다. (글을 읽는것보다 훨씬 간결 ㄷㄷ)

이렇게 데이터 스트링을 체크섬 값 하나로 변형해서  데이터와 함께 패킷에 담아 보내면, 
받는쪽에선 이 체크섬과 자신이 받은 데이터의 Adler-32 체크섬값을 비교해 데이터에 오류 또는 잡음이 있는지 확인할 수 있는것이다.

음..
근데 Adler32가 32비트 를 이용하게때문에 메세지가 짧은경우는 효율이 떨어진다고 한다.
또 잡음같은 일부의 깨짐은 상당히 정확하게 잡아낼 수 있지만, 크게 변형시켜서 체크섬 값을 같게만들 수 있다고도 한다.
(어떻게 같게만드는지는 잘 모르겠다. ㅇㅅㅇ..)

ps. 아 많이 쓰이는 CRC32보다는 계산이 빠르니 메세지가 짧다고 해서 무조건 효율이 나쁜건 아닐수가 있다.
      (비트단위로 접근을 하기때문에 빠른듯 하다) 

ps2. 알고리즘 코드는 댑따 간결하다. (이것도 위키꺼)

위에 글을 대충 이해했으면 코드도 쉽게 이해될것같다.
 

'Secure Note' 카테고리의 다른 글

우회  (0) 2011.10.02
PE 분석 프로그램  (0) 2011.08.03
Crypto는 아니지만,,, 소수찾기  (1) 2011.06.08
해킹 관련 용어  (1) 2011.03.29
base64  (0) 2011.03.22