Crypto

Hash Function의 특징과 용도

총알 2024. 4. 1. 20:08
728x90

지난 글에서 서명검증을 다루면서 서명검증에서 Hash 알고리즘이 언급되었다.

그래서 Hash에 대해 정확히 알아볼 필요가 있어서 이번에는 Hash에 대해서 다뤄보려고 한다.

 

Hash Function(이하 Hash)란...?

임의의 길이의 데이터를 고정된 길이의 데이터로 변환한 값을 Hash라고 한다.

Hash는 주로 Checksum(체크썸)에 사용되는 단방향 함수(출력값으로 입력값을 유추하지 못함)인데

암호 알고리즘들이랑 다르게 Hash는 데이터의 위변조가 있는지 없는지 무결성을 검증하기 위해서 사용한다.

그래서 Hash의 경우 특정 Message를 보낼 때 Hash 값을 같이 보내게 되는데

이 Message의 위변조가 일어났는지 확인을 하기 위한 용도로 사용된다.

 

예를 들어 안녕하세요 라는 message와 함께 안녕하세요라는 message에 대한 Hash 값 0x01을 같이 보냈는데,

이때 누군가가 이 메시지를 가로채서 안녕하세요를 안녕하세용으로 위변조 해서 보냈다고 가정해 보자.

이후 누군가가 이 message를 받을 텐데 이 사람이 위변조가 되었는지 확인하기 위해  Hash값을 구할 것이다.

message 수신자는 받은 message가 안녕하세용 이기 때문에 안녕하세용에 대한 Hash 값을 구하게 될 것이고

이 Hash값은 0x01이 나오지 않게 될 것이기 때문에 수신자는 message가 위변조 되었다는 사실을 알아챌 수 있다.

 

그럼 여기서 또 누군가는 의문을 가질 수 있다고 생각한다.

Hash값도 같이 변조하면 되지 않나??

 

맞다. Hash값도 message와 함께 변조하면 된다. 하지만 이건 사실상 불가능한다.

왜냐하면 이 Hash값을 암호화를 하기 때문이다.

이전글에서 다뤘던 서명검증 방법을 다시 가져왔는데 이걸 보면 왜 불가능한지 이해가 가능할 것이라고 생각한다.

message의 Hash값은 보통 개인키로 암호화를 한다. 그리고 암호화된 Hash값을 공개키로 복호화해야 한다.

그렇기 때문에 개인키를 해킹당하지 않는 이상 message와 함께 Hash값도 위변조 하는 것은 사실상 불가능하다.

 

이렇게 Hash에 대해서 알아보았는데 다음에는 Hash 알고리즘은 어떤 것들이 있으며, 어떤 특징이 있는지 알아보도록 해야겠다.

728x90