CRC(Cyclic Redunancy Check) 암호화란?
안녕하세요 @doctor.fish입니다~
암호화 관련 공부중 CRC에 대한 내용을 정리해보았습니다.
CRC란?
CRC(Cyclic Redunancy Check) 즉, 순환 중복 체크입니다. CRC 암호화는 파일의 에러를 체크하는 데 주로 사용됩니다. 파일을 다운로드할 때 모든 파일이 정상적으로 다운로드 되었는지를 확인할 때 CRC 값을 사용합니다. 최근에 사용하고 있는 CRC는 CRC32이고 십육진수를 사용해 8글자로 표현합니다. CRC 값은 결국 2의 32승 약 43억 개의 키로 개발되는데, 파일 훼손시 같은 키로 세팅될 확률은 43억 분의 1이 됩니다. ZIP, RAR 같은 압축 프로그램이 파일을 압축할 때 CRC32값을 함께 저장합니다. 원칩 마이크로프로세서와 같이 간단한 용도에서는 CRC-16을, 더욱 정확한 에러 검출은 CRC-32를 사용합니다.
CRC 검출 방법
CRC에는 parity 비트 검출, check-sum 방법이 있습니다. parity 비트에 의한 방법은 데이터가 2비트가 4비트가 변하게 되면 검출을 할 수 없습니다. 사실 check-sum 나눗셈을 통해 얻어지는 CRC 값에는 옳지 않은 이름입니다. check-sum에 의한 방법은 한 바이트에서 +1, 다른 바이트에서 -1로 에러가 생기는 경우만 해도 에러가 검출되지 않습니다. 이러한 방법으로 에러를 검출하는 확률은 낮습니다.
CRC 특징
높은 신뢰도를 확보하며 에러 검출을 휘한 오버헤드가 적고, 랜덤 에러나 버스트 에러를 포함한 에러 검출에 매우 좋은 성능을 갖습니다.
CRC 기본 원리
송신
n 비트의 주어진 정보가 있을 때, 이를 k 비트만큼 자리를 올리고 미리 약속한 k 비트의 키값으로 나누면 r 비트의 나머지가 남게 됩니다. 송신 측에서는 원래의 정보 비트를 k 비트 자리 올린 것에 r 비트의 나머지를 더해서 n + r 비트의 데이터를 만들어 보냅니다.
수신
수신된 n + r 비트의 데이터를 키값으로 나누어 보고 나머지가 정확히 0이 되는지 검사하면 됩니다.
이때 k가 16비트면 CRC-16, 32비트면 CRC-32가 되고 키값으로는 수학자들에 의해 정해진 값을 주로 사용합니다. CRC-16에는 0x8005, CRC-32에는 0x04c11db7이 많이 사용됩니다. 그리고 r 비트의 나머지를 Frame Check Sequence(FCS)라고 부릅니다. CRC는 비트 단위 입력에 대한 각 비트별 XOR 연산이므로 최적화에 한계가 있어 미리 계산한 테이블 형태를 사용합니다.
참고 자료
http://blog.bagesoft.com/858
http://mwultong.blogspot.kr/2006/06/qna-zip-rar-crc32-crc-crc.html
https://blog.naver.com/beahey/90119956752
이벤트 참여 감사합니다ㅎㅎ
보팅 꾹 누르구 가용~^^
오래전 Seed 암호화 프로그램 레포트가 있어서 만들어 보긴 했는데 암호화 코딩은 이제 기억도 안나네요
암호화 코딩은 어렵네요 ㅠㅠ