SHA‐256이란 - Hot-stock/backend GitHub Wiki
SHA-256이란
**SHA-256(Secure Hash Algorithm 256-bit)**은 SHA-2 계열의 해시 알고리즘 중 하나로, 입력된 데이터를 고정된 크기인 256비트(32바이트)의 해시 값으로 변환하는 단방향 해시 함수입니다. SHA-256은 다양한 보안 애플리케이션에서 데이터 무결성을 확인하는 데 주로 사용되며, 암호화된 비밀번호 저장, 디지털 서명, 블록체인에서 중요한 역할을 합니다.
작동 방식
-
패딩: 입력 데이터는 512비트의 배수로 만들어져야 합니다. 이를 위해, 데이터 끝에 '1'비트를 추가하고, 그 뒤에 '0'비트를 채워 512비트로 맞춥니다. 마지막 64비트는 원래 데이터의 비트 길이를 저장합니다.
-
초기 값 설정: SHA-256은 고정된 초기 해시 값 8개를 사용합니다. 이 값들은 알고리즘에 의해 미리 정의되어 있습니다.
-
블록 처리: 입력 데이터는 512비트 블록 단위로 처리됩니다. 각 블록은 64번의 반복 연산을 거쳐 해시 값이 계산됩니다.
-
최종 해시 생성: 모든 블록이 처리되면, 최종적으로 256비트(32바이트) 크기의 해시 값이 생성됩니다. 이 값은 원래 데이터가 변경되지 않았음을 검증하는 데 사용됩니다.
결론: SHA-256은 입력 데이터를 패딩하고, 512비트 단위로 나눈 후 64번의 반복 계산을 통해 256비트 크기의 고유한 해시 값을 생성하는 단방향 해시 함수입니다.
특징
SHA-256이 단방향 해시 함수라고 하는 이유는, 입력값으로부터 고정된 크기의 해시 값을 생성할 수 있지만, 생성된 해시 값으로부터 원래의 입력값을 절대로 복원할 수 없기 때문입니다. 이는 역방향 계산이 불가능하기 때문에 단방향 함수로 불립니다.
단방향 해시 함수가 중요한 이유는 비밀번호 , 충돌 저항성이 높기 때문입니다.
-
비밀번호 보안: 단방향 특성 때문에 데이터베이스가 탈취당하더라도 사용자의 평문 입력값은 복호화할 수 없습니다.
-
무결성 보장: 서로 다른 두 입력이 같은 해시 값을 가질 확률이 매우 낮습니다. 이로 인해 입력 데이터의 무결성을 보장할 수 있으며, 데이터가 변조되지 않았음을 확인하는 데 유용합니다.
-
충돌 저항성: 10^256이라는 많은 경우의 수와 더불어, 라운드 연산과 비트 셔플링 같은 복잡한 변환 과정을 통해 서로 다른 입력값이 같은 해시 값을 생성하지 않도록 방지합니다.
- 충돌: 다른 입력 값을 가지고 같은 해시 값을 생성하는 것을 충돌이라고 합니다.
한계점
동일한 입력 값에서는 동일한 해시 값을 같게 됩니다. 해커들이 이를 이용해 레인보우 테이블을 구성해 복호화를 시도할 수 있습니다. 이를 극복하기 위해 Salt 방식이 사용됩니다.
Salt
Salt는 사용자의 입력값에 임의의 랜덤 문자열을 추가한 후 해싱을 수행하는 방식입니다. 이 방법을 사용하면 동일한 입력값이라도 각 사용자마다 다른 해시 값이 생성됩니다. Salt 값이 유출되더라도 보안에는 큰 문제가 없습니다. 그 이유는 각 Salt 값에 대해 별도의 테이블을 만들어야 하기 때문에 해킹이 거의 불가능해집니다.