블로그 이미지
안녕1999

카테고리

전체 (3067)
자바스크립트 (20)
안드로이드 (14)
WebGL (4)
변비 (17)
정치,경제 (35)
C언어,ARM (162)
컴퓨터(PC, Note Book, 윈.. (41)
전자회로, PCB (27)
유머,안웃긴,GIF,동영상 (118)
국부론60 (71)
모듈(PCB) (3)
건강 (2)
FreeCAD (25)
PADS (43)
퇴직,퇴사,구직,취업 활동 (3)
C# (86)
엑셀 (8)
워드 (0)
LabView (6)
레고 (30)
FPGA (0)
Total
Today
Yesterday

달력

« » 2024.5
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

공지사항

최근에 올라온 글

'가중치'에 해당되는 글 2건

  1. 2016.08.09 가중치 체크섬
  2. 2016.08.09 CRC32의 한계

체크섬의 문제점은 데이터가 순서가 바뀌는 경우에도 결과는 동일하다는 것이 문제이다.

이는 전체 중복가능한 경우의 수에서 매우 적은 경우이나, 실제 사용할때는 큰 문제가 된다.


이를 보안한 방식이 가중치 체크섬이다.(내가 이름붙였다.)

데이터를 순서대로 가중치를 부여하여, 곱한다음 더한다.

예)

데이터 : 4,5,2,4

가중치 : 1,2,3,4

4*1+5*2+2*3+4*4=36


데이터 : 4,5,4,2

가중치 : 1,2,3,4

4*1+5*2+4*3+2*4=34

마지막 2개의 데이터 순서가 바뀐 경우에 결과값도 달라진다.

체크섬 방식보다는 훨씬 안전하다.


그러나, 체크섬방식 보다는 훨씬 적은 수의 데이터만 정확성을 보장한다.

범위를 초과하는 결과값에 대해서는 중복가능성이 매우 크다.

계산 속도 면에서도 곱셈연산이 한번 더 들어가므로, 2배정도 느리다.

CRC32에 비하면, 가중치 체크섬 방식도 매우 빠르다.

CRC32계산 속도는 너무 느리다.


가중치 체크섬방식의 문제점 한가지는, 특정한 위치의 값이 바뀌는 경우는 판별이 불가능하다는 것이다.

이문제를 해결하기 위해서, 가중치 체크섬 방식으로 "앞에서 뒤로" 와 "뒤에서 앞" 2가지 결과를 사용하는 방법이 있다.

물론, 속도는 2배 느려진다. 그래도 CRC32보다는 빠르다.


32비트 가중치 체크섬 방식은 실제 데이터를 사용할 경우에 CRC16수준의 결과를 얻었던것으로 기억한다.


데이터를 작게 요약하는것은 그 크기만큼의 중복가능성이 존재한다. 완전한 해결방법은 1:1로 비교하는것 뿐이다.


하드웨어 crc방식이 주로 사용되는 이유는, 성능이 더 우수하기도 하지만, 하드웨어로 구현이 쉽기 때문이다.

그러나, crc연산유닛이 없는 곳에서는 차라리 곱셈-덧셈 방식이 더 효율적일 수 있다.

연산 함수나 유닛이 없는 자바같은 언어인 경우, 모든 연산 하나 하나마다, 엄청난 연산이 필요하다.

이런 경우에는 crc방식은 매우 안좋은 선택이다.

Posted by 안녕1999
, |

CRC32의 한계

카테고리 없음 / 2016. 8. 9. 23:30

CRC32는 특정 데이터의 오류가 발생했는지를 확인하기위한 방법이다.


32비트 결과물이므로, 32비트보다 큰 데이터의 경우, 중복가능성이 존재한다.

64비트데이터인 경우, 32비트데이터 길이만큼 중복 가능성이 존재한다.

엄청난 문제이다. 그러나, 실제로 사용되는 데이터는 2^64 의 모든 경우를 사용하는 경우는 드물다.

그러므로 실제 오류가능성으 크게 낮아진다.

그러나, 중복가능성은 여전히 존재한다.


MD5같은 방식을 추천하기도 하지만, MD5도 중복 가능성은 존재한다.

가장 확실한 방법은 데이터를 1:1로 비교하는 방법이지만, 너무 부담스럽다.


다른 방법으로는 데이터를 n등분하여, 각 구역별로 CRC32를 계산하는 방법이 있을 수 있다.

그러나, 이역시, 완전한 대책은 되지 않는다.


또다른 방법으로는 CRC32+체크섬+가중치 체크섬+...등, 동일한 데이터를 여러가지 방식으로 표시한다.

CRC32도 같아야 하고, 체크섬도 같아야하고, ...

PC에서는 CRC32보다는 체크섬방식이 효율적이다.

CRC32는 하드웨어 구현할때 효과적인 방법이다.

(CRC32는 PC에서 계산할때, 시간이 많이 걸린다.)

왜 PC에는 CRC32계산하는 하드웨어가 없나???


데이터 중복이 문제가 될 소지가 있는 경우에는, CRC32가 같을 경우에도, 1:1로 완전한 비교가 필요하다.

물론, CRC32가 다른 경우에는 1:1비교는 불필요하다.


데이터의 크기가 상당히 큰 경우에는 1:1비교하는데 시간이 많이 걸리는 문제가 있다.


len, CRC32는 같은데, 데이터가 다른 경우, 처리방안

모든 CRC32를 사용하지 않으므로, CRC32+1에 저장하면 될듯 하다.

그러나, 이 역시 불안하다.

CRC32파일명으로 [LEN][DATA][LEN[DATA]...방식으로 저장하는것이 좋을듯 하다.

단, 데이터의 크기가 매우 크지 않을 경우에만

Posted by 안녕1999
, |

최근에 달린 댓글

글 보관함