암호학) 암호화와 해시(Hash), 해싱(Hashing)알고리즘, 해시 함수

Karinnovation🦄
CURG
Published in
11 min readOct 28, 2022

암호화와 해싱, 해싱 알고리즘과 해시 함수 등 헷갈리는 용어 정리

이은지(@Karinnovation) | researcher of CURG | karin.blockdev@gmail.com | Karinnovation🦄

암호학 기초 시리즈

아래는 Crypto 암호학 기초 시리즈편으로 구성되어 있습니다.

1편- 암호화와 해시(Hash), 해싱(Hashing)알고리즘, 해시 함수(CHF: Cryptographic hash function)

2편- 암호화 해시 함수 재정리 + 발생할 수 있는 7개의 공격 (7 Possible Attacks on Hash Functions)

3편- 해시 함수 단점과 보완법(Hash Function Disadvantages and Complementary Methods)

목차

1) 암호화란? (대칭 / 비대칭 / 혼합)

1–1) 암호키와 코드

2)암호화와 Hashing의 차이?

3) Hashing과 Hashing알고리즘 , Hash함수

4) 해시와 해싱의 쓰임 차이

암호화(Encryption)?

암호화(Encryption)은 암호학(Cryptography)의 주된 응용이다.암호화는 이해할 수없는 시각적 형태로 매핑돼 자료의 ‘기밀성’을 보장한다. 평문을 암호문으로 변환하는 과정을 의미한다.

더 쉬운말로 암호화(Encryption)은 특별 지식을 소유한 사람(권한을 가진 사람)을 제외하고 누구든지 읽어볼 수 없도록 알고리즘을 이용해 정보를 알아보지 못하게 전달하는 과정이다.

암호를 ‘Cipher’라 한다.= 암호화 알고리즘을 ‘암호화’라 말한다. = ‘암호화 된 금고나 좌물쇠’로 이해하면 쉽다.

역과정은 해독 또는 복호화=디크립션(decryption)으로 암호화된 정보를 다시 읽을 수 있게 한다.

암호 키(Encryption Key)

암호화(Encryption)를 위해 ‘알고리즘’과 ‘비밀 값=암호 키’ 가 필요하다.

암호 키방식은 암/복호화에 따라 세 가지로 나뉜다.

@대칭 암호화(양방향)- 암호키와 복호키가 동일

@비대칭 암호화(양방향)- 암호키와 복호키가 다름

@혼합 암호화 — 대칭 암호화와 비대칭 암호화 혼합.

@해시 함수(단방향)- 코드 자체의 무결성 주장. 변경 감지 코드(MDC) / 메세지 인증 코드 (MAC)

Hash함수로 변환한 Hash value(해쉬값)은 복호화가 불가하다.

즉, 단방향 함수는 일방통행만해서 평문을 볼 수 없는 일방통행만 하는 함수다. 평문은 볼 수 없지만, 해쉬값으로 맞는지 아닌지 유추한다.) 반면 양방향 암호화 방식은 쌍방으로 키를 교류하여 복호화(해독)가 가능한 방식이다.

더 자세한건 여기 정리해놨다. > 대칭키와 비대칭키 차이와 Structure

보안 암호화로 언급되는 종류는 ‘MD5’와 ‘SHA256’이 존재한다. 이들은 ‘데이터 변조 방지’를 위해 해싱 알고리즘을 쓴다.

용어를 정리하면

1) 암호화(Encryption): 평문을 암호문으로 변환하는 과정

2) 복호화(Decryption): 암호문을 평문으 변환하는 과정

3) 평문(plain text): 아직 암호화되지 않은 메세지

4) 암호문(ciphertext): 암호화된 메세지

5) 암호화 알고리즘: 두개 함수_암호화 함수 / 복호화 함수로 총 2개 구성

코드(code)란?

대중에게 변환 규칙을 설명하여 누구나 해독 가능하게 해놓은 기호 표시방법 (ASCII코드 / 유니 코드 / 모르스 코드 등)​

디코딩(Decoding):어려운 코드를 사람이 이해하는 문자,숫자로 변환하는 것

인코딩(Encoding): 사람이 이해가능한 문자나 숫자를 코드로 변환하는 것​

코드와 암호의 차이?

코드변환 규칙은 공개정보다. 누구나 인코딩, 디코딩이 자유롭게 가능하다. 즉, 코드는 정보보호를 위해 만들어진게 아니다. 기계나 장치가 이해할 수 있는 언어로, 기계 적용 최적화에 목적을 둔다.​

반대로 암호는 암호화된 정보를 풀기위한 비밀정보를 특정인에게만 부여해 다수로 부터 보호하기 위한게 목적이란점이 극명한 차이다.

해시(Hash)과 해싱(Hashing) 알아보기

해시(Hash)

문자가 조금만 달라저도 크게 달라짐.

다양한 길이를 가진 데이터를 고정된 길이를 가진 데이터로 매핑(mapping)한 값이다. 이를 이용해 특정 배열의 인덱스나 위치나 위치를 입력하고자 하는 데이터의 값을 이용해 저장하거나 찾을 수 있다.

해시 함수(Hash function)?

해시함수(hash function)을 이용해 해시테이블 (hash table)에 데이터를 저장하는 행위를 말한다. 데이터 중복 방지를 위해 임의의 문자열을 추가해 해시값을 만들어 저장 및 비교 가능하다.

역할: 데이터 무결함 인증. 서명 내용 변조 방지, 다량 데이터 해시값으로 작게 변환(=빠른 데이터 비교 가능)

해시 함수 종류 (feat: Hash wiki)

  1. MD(메시지 출력)시리즈- MD4, MD5, MD6
  2. SHA( Secure Hash Algorithm) 시리즈 — SHA, SHA-1, SHA-2, SHA-3
  3. RIPEMD(RIPE Message Digest)
  4. WhirlPool
  • SNEFRU : 1990년 R.C.Merkle에 의해 제안됐다. 128/254 bit 암호화 알고리즘이다.
  • N-HASH : 1989년 일본 NTT의 미야구치 등이 발표했다.
  • MD4 : 1990년 Ron Rivest에 의해 개발된 MD5의 초기 버전으로서, 입력 데이터(길이에 상관없는 하나의 메시지)로부터 128비트 메시지 축약을 만듦으로써 데이터 무결성을 검증하는데 사용되는 알고리즘이다.
  • MD5 : 1992년 Ron Rivest에 의해 개발. MD5는 널리 사용된 해시 알고리즘이지만, 충돌 회피성에서 문제점 이 있다는 분석이 있으므로 기존의 응용과의 호환으로만 사용하고 더 이상 사용하지 않도록 하고 있다.
  • SHA : 1993년에 미국 NIST에 의해 개발되었고 가장 많이 사용되고 있는 방식이다. SHA1은 DSA에서 사용하도록 되어 있으며 많은 인터넷 응용에서 default 해시 알고리즘으로 사용된다. SHA256, SHA384, SHA512 는 AES의 키 길이인 128, 192, 256 비트에 대응하도록 출력 길이를 늘인 해시알고리즘이다.
  • RMD : RMD128, RMD160는 RIPE 프로젝트의 RIPEMD나 MD4, MD5를 대신하기 위하여 디자인된 해시 알 고리즘이다. 128 비트의 출력을 내는 RMD128은 역시 충돌 회피성에서 문제점이 있다. RMD160은 효 율성은 떨어지지만 안전성을 높인 것으로 많은 인터넷 표준들에서 널리 채택되고 있다. RMD256과 RMD320은 각각 RMD128과 RMD160을 확장한 것이다.
  • TIGER : TIGER는 64 비트 프로세서에 최적화되어서 64 비트 프로세서에서는 매우 빠르다.
해시 함수 성능

해싱(Hashing)알고리즘이란?

키(Key) 값을 해시 함수(Hash Function)라는 수식에 대입시켜 계산한 후 나온 결과를 주소로 사용하여 바로 값(Value)에 접근하게 할 수 하는 방법

해싱 알고리즘 종류

  • 제곱법 : 키값을 제곱한 후에 중간의 몇자리를 선택하고 그 중간 값을 주소로 이용
  • 제산법 : 레코드 키 값을 소수로 나누어 나머지 값을 주소로 결정
  • 중첩법(폴딩법) : 길이를 동일하게 여러 부분으로 나누고, 더하거나 XOR 하여 주소 이동
  • 숫자분석법 : 각 숫자의 분포를 이용해서 균등한 분포의 숫자를 선택해서 사용
  • 기수 변환법 : 주어진 키의 값을 다른 진법으로 변환하여 얻은 값을 주소로 사용
  • 무작위 방법 : 난수 발생, 탐색을 위한 해시의 경우 충돌이 발생하면 다음 난수를 이용

해싱 알고리즘 특징

  1. 해싱 완료 시, 해시값을 통해 원래 문자열을 알 수 없다. 변조 여부만 확인 가능. (예외적으로 비밀키 사용 시에만 본래 문자열 알 수 있음)
  2. 동일 문자열은 동일 해시 알고리즘을 사용 시 반드시 동일한 해시값 출력함. 서로 다른 문자열이 동일한 해시 알고리즘을 사용한다 해도, 서로 다른 해시값을 출력함. 문자열이 다르면 해시값도 다르다. 문자열을 변경하면 해시값도 변경된다.

해싱 알고리즘을 사용한 Argon2

Argon2는 2015년 7월 암호 해싱 대회에서 우승작으로 선정된 키 유도 함수이다. Argon2의 참조 구현체는 크리에이티브 커먼즈 CC0(퍼블릭 도메인) 또는 아파치 라이선스 2.0으로 배포되며 이와 관련된 3개의 버전을 제공한다.

Argon2d: GPU 크래킹 공격 저항성 극대화. 더 빠르고 data-depending 메모리 액세스를 사용하므로 비밀 해싱에 덜 적합하고 부 채널 타이밍 공격의 위협이 없는 암호 화폐 및 애플리케이션에 더 적합하다.

Argon2i: 사이드 채널 공격 저항에 최적화됨. 암호와 독립된 순서로 메모리 배열에 접근. 암호 해싱 및 암호 기반 키 유도에 적합한 데이터 독립적 메모리 액세스를 사용한다. 트레이드 오프 공격으로부터 보호하기 위해 메모리를 더 많이 통과하므로 속도가 느리다.

Argon2id: 하이브리드 버전. 메모리 처음 절반을 Argon2i이 접근하고 이후 패스는 Argon2d가 접근. argon2i 와 argon2d 와 하이브리드로 data-depending 과 data-independent memory access 를 혼용할 수 있으며 password hashing 과 password 기반 키 유도에 적합합니다.

위 모드 3개는 모두 3개의 통제 변수를 사용.

실행 시간 / 필요한 메모리 / 병렬 수준

암호화(Encryption)와 해싱(Hashing) 차이

암/복호화 & 해싱 알고리즘

해싱과 암호화는 모두 ‘데이터 보안’을 높이기 위한 장치다. 하지만 차이가 존재한다.

암호화(encryption)는 수신자와 송신자 사이 암호화와 복호화 두 단계 존재. ‘데이터 노출 최소화’가 목표임. (웹 사이트 SSL 인증서: 서버 브라우저 통신 시 주고받는 데이터를 암호화하기 위함)

해싱(Hashing)은 암호화된 텍스트의 해시값을 검사해, 데이터 변조가 없었는지 자체의 무결함을 증명하는 것이 목표임.

해싱(Hashing)과 해시(Hash)의 차이

‘해싱’은 각 사용자의 일반 텍스트 암호를 가져와 단방향 수학 함수를 통해 암호화를 실행하는 것이다. 이때 ‘해시’라고 하는 고유한 숫자 및 문자 문자열이 생성된다.

( Hash명사+ing(실행 중인 행위)= Hash+ing)

정리하면, ‘해싱’은 암호화를 실행하는 행위이자 방법이고, ‘해시’는 비밀번호라고 생각하면 쉽다.

해시와 해싱 쓰임의 차이

해시를 해독한다. 해싱으로 비밀번호 보호한다!

해시 용어 정리 (Outro)

해시 함수(Hash function) : 데이터를 키로 변환하는 함수. 예를 들어 길고 복잡한 문자열을 짧고 단순한 문자열로 변경

해싱 함수: 키에 대한 저장 주소를 구할 때 적용되는 함수

해싱 알고리즘: 키값의 계수적 성질을 이용해 저장 주소를 구한 후 자료를 저장하고 같은 방법. 자료의 검색, 삽입, 삭제 등을 수행하는 방법 . 삽입삭제가 용이하고 빠름

버킷(Bucket): 해싱 함수에 의해 계산된 주소 자료를 기억시키기 위한 기억 장소

슬롯(slot): 한 개의 레코드를 저장할 수 있는 공간. N 개의 슬롯이 모여 하나의 버킷을 생성

홈 주소(해시/ 버킷 주소) : 해싱 함수에 의해 계산된 번지로, 자료가 저장되는 주소

해시표(Hash table): 해싱 함수에 의해 산출된 함숫값의 위치에 해당 자료를 기억시킨 표

충돌: 서로 다른 심벌이 해싱함수 적용 결과 동일한 버킷 주소를 가지는 경우

동의어: 동일한 버킷 주소를 가지는 서로 다른 심벌

오버 플로: 충돌이 발생하고 해당 주소 버킷이 가득 차서 빈 슬롯이 없는 경우(오버플로는 버킷 수와는 무관, 버킷 크기와 적재 밀도에 관련 있다)

무차별 대입 공격: 컴퓨터가 가능한 모든 문자 조합을 시도하는 것

마무리

헷갈렸던 암호학 기초에 대해 정리해보았습니다. 다음엔 해시 함수 전체 읽기 Deepdive해보겠습니다. 2편- 암호화 해시 함수 재정리 + 발생할 수 있는 7개의 공격 (7 Possible Attacks on Hash Functions)

오늘도 읽어주셔서 감사합니다.

이은지(@Karinnovation) | karin.blockdev@gmail.com

--

--

Karinnovation🦄
CURG
Writer for

블록체인 개발 냉장고 파먹기 연재 (Blockchain Dev Eating Series) Interaction dev(fe)에서 암호학 전문 개발자로 성장중입니다. 관심: 비트코인, 이더리움, ZK (미술,역학 12년째 ing)