01. 단방향 암호화 알고리즘 정의
- 한 쪽으로만 암호화 하는 방법
- 다양한 길이의 문장을 항상 고정된 길이의 암호문으로 변환하지만, 원래 문장으로 복호화 할 수 없음
02. 단방향 암호화 특성
- 단방향 암호화는 비밀번호 암호화, 문서 진위 여부 검증 등 다양한 목적으로 사용
- 비밀번호를 단방향으로 사용하는 이유: 복호화 불가능
- 해커가 암호문으로 저장된 비밀번호를 훔쳐가더라도 복호화가 불가능하므로 원래 비밀번호를 알 수 없음
- 증명서, 문서 진위 여부로 사용할 때: 중요한 문서가 진짜인지 확인할 경우에도 사용
- 문서의 진위를 확인해달라고 요청할 시,
- 이 문서의 암호문(즉 해시값)을 생성하여 내가 가지고 있는 암호문과 비교
- 두 암호문이 동일하다면 증명서가 진짜라고 판단
- 비밀번호를 안전하게 저장하려면 양방향 암호 알고리즘을 사용해야 하는 것이 아닌가?
- 양방향 암호 알고리즘은 복호화를 통해 원래 비밀번호를 알아낼 가능성이 존재함
- 따라서 단방향 암호 알고리즘을 사용하는 것
03. 해시 함수(Hash Function) 정의
- 해시 함수: 입력 값 처리 후 출력 값을 반환하는 함수, 이해하기 어려운 문장으로 나열
04. 해시 함수(Hash Function) 특징 4가지
(1) 항상 고정된 길이의 해시 값 출력
- ex) 64개의 16진수 문자열 == 256 비트
- 입력 값과 상관 없이 항상 고정된 길이의 해시 값을 만듦
- 일반적으로 해시 값은 64개의 16진수 문자열로 표현
- 각 16진수 자리는 4비트로 표현되므로 16진수로 표현된 숫자의 개수(64개)를 4로 곱하면 256 비트의 해시 값을 만들 수 있음
- 비밀번호가 짧든 길든 해시 값의 길이가 동일하기 때문에 해시값의 길이로는 비밀번호의 길이를 유추하기 어려움
*16진수: 0~9, A~F로 구성된 16을 기수로 하는 번호 체계
(2) 동일한 입력 값에 대해 항상 동일한 해시 값 출력
- 다음과 같이 동일한 입력 값을 반복해서 넣어도 해시 함수의 결과는 변하지 않음
(3) 입력의 작은 변화에 출력이 크게 변함(눈사태 효과)
- 입력 값이 조금이라도 변경된다면 완전히 다른 해시 값을 출력함
- 앞서 설명한 것처럼 동일한 입력 값에는 동일한 해시 값을 출력하지만, 입력값이 조금이라도 달라진다면 출력 값도 변화가 생김
- 입력의 작은 변화에 출력이 크게 변하기 때문에 눈사태 효과라고 함
- 만약 해시 함수가 유사한 입력에 유사한 해시 값을 만든다면 비밀번호 암호화에 사용하지 않았을 것
- 입력 값이 조금만 달라져도 완전히 다른 해시 값을 출력하기 때문에 해시 값을 보고 비밀번호 패턴을 유추하기 어려움
(4) 해시 값으로 입력 값 유추 할 수 없음 -> 입력에서 출력으로 향하는 단방향
- 해시 값으로 원래의 입력 값을 유추 할 수 없음
- 복잡하게 나열된 해시 값으로 원래 입력 값을 찾기는 현실적으로 불가능함
- 입력에서 출력으로 향한느 단방향 암호 알고리즘을 사용하기 때문
- 코딩을 할 때, 비밀번호를 해시 값으로 변환하여 저장하는 이유도 비밀번호 유출을 최소화하기 위함임
- 여러 곳에서 회원가입을하다 보면 유사한 비밀번호가 유출된다면 다른 곳의 계정도 안전을 보장하지 못하게 됨
- 따라서 해시 함수를 이용하면 원래 비밀 번호를 알아낼 수 없기 때문에 해시 값이 유출되더라도 다른 곳의 비밀 번호를 유지할 수 있음
'JAVA 심화' 카테고리의 다른 글
[JAVA] 심화 - 단방향 암호화 기법 (2) (0) | 2024.12.30 |
---|---|
[JAVA] 심화 - 양방향 암호화 기법, 비대칭 키 암호 알고리즘 (2) (1) | 2024.12.30 |
[JAVA] 심화 - 양방향 암호화 기법, 대칭 키 암호 알고리즘 (1) (1) | 2024.12.30 |