하나도 모르겠네
해쉬 설명해줄 사람 계십니까
+++++++..(cwoo0516)
2015-04-17 14:48
추천 0
댓글 17
다른 게시글
-
nono 하고 포봄하고 코딩배틀 뜨면 포봄이 이길듯.익명(5.152) | 15.04.17추천 2
-
이거 키 아는사람 있어???? [2]dhdltmznf(dhdltmznf) | 15.04.17추천 0
-
야들아 로컬에서 DB 프로파일링하는데 쿼리가 한번에 쏠릴시 갑자기 느려지 [1]익명(218.236) | 15.04.17추천 0
-
[질문] 데이터 통신 공부하고있는데 책이 뭐이따구냐 ㅋㅋ 황당 [1]게루밥(gerubob) | 15.04.17추천 0
-
arm에서 ldr str이 무슨 약자예요? [2]내눈물나는..(mystorys90) | 15.04.17추천 0
-
nono 좆병신인데 너무 과대평가하는거 아니냐?익명(37.157) | 15.04.17추천 0
-
학부때 공부했던 알고리즘 대부분 다 잊어버렸네요... [4]익명(70.208) | 15.04.17추천 0
-
님들 자바에서 [2]참치(183.97) | 15.04.17추천 0
-
매번 말하지만 스크립트 언어의 존재 의미는 C/C++을 지원하는데 있다.익명(211.58) | 15.04.17추천 0
-
안드로이드에서 로우레벨 3d 렌더링 뭘로하냐 [2]ㅇ(223.62) | 15.04.17추천 0
니가 해쉬 발아.
해쉬 = 데이터를 고정된 짧은 길이의 결과로 가공해서 내놓은 것. 두 데이터의 개략적인 일치성(정확 X) 비교를 위해 사용. 기본적으로 데이터가 전송 과정에서 오류가 발생하지는 않았는지 오류를 검출하기 위한 목적이 1차 목적임.
그럼 그냥 어떤 형태로든 변환해 주면 되는거?
어떤 값을 mod 1234 하거나 Digit sum을 구하는 등의 조작을 해서 값을 짧게 만들어서 해쉬로 쓸 수 있겠지. 다른 예도 엄청 많고. 참고로 암호학에서 쓰이는 해쉬는 해쉬 알고리즘이라고 해서 다 갖다가 쓸 수 있는 게 아니고 눈사태 효과(Avalanche effect)가 보장되어야 한다. 즉 암호 분석이 어려워야 함. 그런 의미에서 CRC32 같은 알고리즘은 암호학에서 사용할 수 없음.
ㅇㅇ. Hash의 정의 상 어떤 형태로든 변환만 하면 다 Hash다. hash라는 영어 단어 자체가 잘게 다진 고기를 뜻함.
그럼 변환된 값을 가지고 원래 값을 알 수 있도록 해줄 필요는 없는거?
ㅇㅇ 아니 애초에 해쉬라는 거의 정의 상 수학적으로 원래 값을 알 수 있을리가 없지. 1:1 함수가 아니라 N:1(다대일) 함수인데... 해쉬로 원본 값 복원하는 알고리즘 나오면 레알 튜링 상 탄다. 어떤 인풋이든 고정된 짧은 길이의 메시지로 줄여버리는데 최고의 압축 알고리즘 아니겠냐? 근데 이론적으로 그런 건 불가능함. 비둘기집 원리에 의해서지.
근데 그럼 콜리젼 일어나면 왜 문제가 되는거? 다대일이면 그 상황을 충돌이라고 부를 이유가 없잖아
기본적으로 해쉬가 쓰이는 목적이 두 데이터의 일치성 비교를 위한 것인데 해쉬의 정의상 똑같은 출력 값을 가지는 입력 값은 여러 개일 수 밖에 없고 그래서 두 데이터의 완전한 일치성 비교가 불가능해지기 때문에 "충돌(collision)"이라는 이름으로 부르고 따로 다루는 거지.
일반적인 해쉬 알고리즘은 충돌 찾기가 매우 쉬운데 암호학적인 해쉬 알고리즘은 충돌 찾기가 매우 어려워야 한다.
비둘기비둘기 펌핑렘마 배우고 나서 오랫만에 들어본다
간단히 예를 들어 1234로 나눈 나머지(% 1234)를 해쉬로 취할 경우 1234 주기로 충돌이 발생한다는 걸 초딩도 알 수 있겠지. 근데 이런 건 암호학적으로 사용할 수 없음. 프로그램 자료 구조에서나 내부적으로 쓸 뿐이지.
아 ㅇㅋㅇㅋ 이해됨
떙큐
그럼 두 데이터의 서로 다른 값이 같은 해쉬값을 가진다면 구별할 수 없겠네?
ㅇㅇ. 해쉬라는 거 자체가 같는 의미가 두 데이터가 일치할 확률을 최대한 낮추는 게 목적임. 해쉬 값의 경우의 수가 2^32 개이고 확률적으로 고르게 분포되었음이 보장된다면 이상적으로 두 데이터가 일치할 확률은 1/(2^32)로 매우 낮으니까... 하지만 저렇게 매우 낮은 확률이라고 손치더라도 충돌은 발생할 수 있으니 만에 만에 만에 만에 만에 하나의 상황에 대해서라도 염두에 두고 코드 상으로 대비해야 겠지.
해쉬가 압축이라는 건 해쉬를 이해 못한 소리. 해쉬는 그냥 먹고 소화하고 나온 똥이야. 똥은 어떻게 해도 원래 음식으로 못 돌아가. mp3가 손실압축이라 원래의 무손실 wav파일로 되돌리지 못하는것처럼, 해쉬 또한 손실 처리야. 그냥 같은거 넣으면 같은게 나온다는 것이 최고 장점이라 쓰는거지. 물론 salt키 이용한 crypt라면 salt키 따라 다르게 나옴. 사실 salt라는거 자체가 그냥 salt+메시지로 이용해서 해쉬 만들기 위한거니까, 엄밀히 말하면 '같은걸 넣는게 아닌거'지만.