[16] 암호화 방식 (1) - 단방향 암호화(해시)

원본을 한 방향으로만 변환하는 암호화 방식

by 키라쿠

앞으로 며칠 동안 암호화 방식(단방향, 양방향, 혼합형)에 대해서 다뤄볼건데요. 오늘은 1편, 단방향 암호화 시작합니다.



1. 단방향 암호화란?

단방향 암호화(해싱)는 “원본을 한 방향으로만 변환”하는 방식이에요. 즉, 원래 데이터를 해시 함수에 넣으면 고정 길이의 해시값(지문) 이 나오지만, 그 해시값만 보고 원래 데이터를 다시 알아내는 건 실질적으로 불가능합니다.

예를 들어 문자열 "password"를 SHA-256 해시 알고리즘(출력 해시 값이 256비트임)으로 해시하면 5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8 가 나옵니다.

body1.png


2. 단방향 암호화의 핵심 성질

단방향 암호화는 다음과 같은 핵심 성질들을 가지고 있어요.


1) 단방향성 : 해시값을 알고 있을 때, 그 해시값을 생성한 원본 입력값을 찾는 것(역산)이 계산적으로 불가능해야 함.


2)충돌 저항성 : 같은 해시 값을 생성하는 서로 다른 두 개의 입력값을 찾는 것이 극히 어려워야 함(무결성)


3)결정성 : 같은 입력값을 해시 함수에 넣으면 항상 같은 해시값이 출력되어야 함.


4)고정된 출력 길이 : 입력 데이터의 길이가 1바이트든 1기가바이트든 관계없이, 해시 함수는 항상 고정된 길이의 해시값(ex: SHA-256은 256비트)을 출력해야함


5)Avalanche 효과 : 입력 데이터에서 단 하나의 비트만 바뀌어도, 결과로 나오는 해시 값은 완전히 다르게 변해야 합니다.(원본 추론이 불가능하게끔)

body2.png


3. 주요 해시 알고리즘

단방향 암호화(해싱)주요 알고리즘을 정리해보면 다음과 같습니다.


1) MD5(Message Digest Algorithm 5)

1991년에 공개된 초창기 해시 알고리즘으로, 당시에는 비밀번호 저장이나 파일 무결성 검증에 널리 사용되었습니다.

하지만 충돌(서로 다른 입력이 같은 해시값을 내는 현상)이 쉽게 발생한다는 치명적인 단점이 발견되어, 현재는 보안용으로는 거의 사용되지 않습니다.


2)SHA-1 (Secure Hash Algorithm 1)

MD5의 한계를 개선하기 위해 1995년 미국 NIST가 표준으로 채택했습니다. 한동안 SSL/TLS 인증서와 Git 등 여러 시스템에서 사용됐지만, 2017년 구글이 실제 충돌 사례를 발표하면서 보안성이 무너졌습니다.


3)SHA-2 (SHA-256, SHA-512 등)

SHA-1 이후를 이은 강력한 해시 표준으로, 오늘날 가장 널리 쓰이는 보안 해시 함수입니다. 256비트나 512비트로 결과를 생성하며, 비밀번호 해시나 디지털 서명, 블록체인(비트코인 등)에서도 사용됩니다.

하지만 연산 비용이 비교적 크고, GPU 병렬 계산에 취약한 부분이 있어 이후의 새로운 표준이 등장했습니다.


4)SHA-3 (Keccak)

SHA-2의 구조적 한계를 극복하기 위해 2015년 NIST가 새 표준으로 채택한 알고리즘입니다. 내부 구조가 완전히 달라 충돌 저항성이 더욱 높고, 하드웨어 효율도 개선되었습니다.

SHA-3는 해시 함수 연구의 최신 성과로 평가받으며, 차세대 표준으로 자리 잡아가고 있습니다.


5)패스워드 전용 해시 3종(bcrypt, scrypt, Argon2)

일반 해시 함수들은 너무 빠르게 계산되기 때문에, 공격자가 무차별 대입(brute-force) 공격을 쉽게 시도할 수 있습니다.

이를 막기 위해 bcrypt, scrypt, Argon2 같은 '느린 해시 함수'가 등장했습니다.


이들은 연산 비용을 높여 공격 난이도를 크게 증가시키며, Argon2는 2015년 비밀번호 해시 대회(PHC) 우승작으로 현재 가장 권장되는 방식입니다.(실제로 인터넷에서 sha-2, Argon2 변환기 검색해서 변환해보시면 속도 차이가 꽤 큽니다)

body3.png


4. 그래서 어디에 씀?

해시 알고리즘들은 주로 다음과 같이 사용됩니다.


1) 비밀번호 저장 및 인증

사용자가 설정한 비밀번호 원본을 저장하는 대신, 비밀번호를 해시 함수(Argon2, bcrypt 등 비밀번호 전용 해시)를 거친 해시값으로 변환하여 저장합니다.

그래서 설령 데이터베이스가 해킹당해 해시값이 유출되더라도, 해시의 단방향성 때문에 공격자가 원래 비밀번호를 알아내는 것이 실질적으로 불가능합니다.

사용자의 인증은 로그인할 때 입력한 비밀번호를 다시 해시하여, 저장된 해시값과 일치하는지 비교하는 방식으로 신원을 확인합니다.


2)데이터 무결성 검증(위변조 방지)

소프트웨어나 파일을 다운로드할 때, 원본 제공자가 SHA-256 같은 해시 알고리즘으로 계산된 해시값(체크섬, 파일 전체의 해시값)을 함께 제공합니다.

이후 사용자는 파일을 다운로드하고, 파일이 안전하게 도착했는지 확인하기 위해 다운로드한 파일을 동일한 알고리즘으로 해시값을 계산합니다.

이 과정에서 해시값이 일치하면 파일의 내용이 단 한 비트도 변경되지 않은 것이고, 불일치하면 전송 중 손상되었거나 악의적인 공격자에 의해 변조되었을 가능성이 높습니다.


3)블록체인

해시함수는 비트코인과 이더리움 같은 암호화폐의 핵심 메카니즘인데요. 블록 체인의 연결과 작업 증명(채굴)에 해시의 단방향성이 활용됩니다.

body4.png


오늘은 암호화의 큰 맥 중 하나인 단방향 암호화에 대해 알아봤는데요.


다음 시간에는 마지막에 간단히 언급하고 넘어간, 블록체인에서 해시가 어떻게 사용되는지 좀 더 자세히 살펴보려고 해요!


읽어주셔서 감사합니다.

keyword