해시 (Hash)
- 임의의 크기를 가진 데이터를 고정된 크기의 데이터로 변환 시킨 것
- 해시 알고리즘
: 데이터를 해시로 변환하는 알고리즘
: 해시 자체는 암호화 과정이 아니지만, 암호화 기법과 같이 사용하여 다양한 기능을 구현할 수 있음
MD5 (Message-Digest algorithm 5)
- RFC1321로 지정된 128비트의 해시함수
: 주로 프로그램이나 파일의 무결성을 검사할때 사용
: 설계상 결함으로 인해 보안 관련 용도로는 사용하지 않음
=> 노트북 한대의 계산능력으로 1분내에 해시 충돌 검출 가능
- 기본개념
ㆍ32개의 16진수로 이루어진 해시 값 생성
ㆍ생성가능한 해시 값의 수 = 16^32
ㆍ충돌 (Collision)
: 원본 데이터가 다름에도 불구하고 같은 해시 값이 생성되는 것
SHA (Secure Hash Algorithm)
- 미국 국가 안전 보장국(NSA)에서 개발한 서로 관련된 암호학적 해시 함수들의 모음
: SHA-1, SHA-2, SHA-256, SHA-512 등의 알고리즘이 있음
: SHA-2의 경우 224, 256, 384, 512 bit의 해시함수로 구성 되어 있음
: TLS, SSL, PGP, SSH, IPSec 등의 많은 보안 프로토콜에서 채택
- 기본개념
ㆍ원본 데이터의 작은 변화에도 해시 값의 변동이 매우 큼
ㆍ현재 MD5와 SHA-1은 보안이 뚫렸으나, SHA-2 계열 알고리즘은 현재까지는 안전
ㆍSHA-256 (256bit) / SHA-512 (512bit)가 현재 널리 쓰이는 중
암호화 알고리즘
Adaptive Key Derivation Dunction
- 다이제스트 (해시화된 데이터)를 생성할때 salting과 Key-Stretching를 반복하여 공격자가 쉽게 유추할 수 없도록
보안의 강도를 선택할 수 있는 함수
- PBKDF2, Bcrypt, Scrypt가 있음
※ salting
: 해시함수 실행전 원문에 임의의 문자를 덫붙혀 보안성을 높이는 기법
※ Key-Stretching
: 입력한 패스워드의 다이제스트를 생성하고 생성된 다이제스트를 입력 값으로 하여 다이제스트를 생성하는 것을
반복하여 보안성을 높이는 기법
PBKDF2 (Password-Based Key Derivation Function)
- 해시 함수의 컨테이너 역할을 하는 함수
: 검증된 해시함수만을 사용
: 해시함수와 salt를 적용하여 해시함수의 반복횟수를 지정하여 암호화 가능
: 가장 많이 사용되는 ISO표준에 적합한 알고리즘
Bcrypt
- Blowfish 암호를 기반으로 설계된 패스워드 해싱 함수
: 1999년 발표 이후 현재까지 사용중인 가장 강력한 암호화 알고리즘
: OpenBSD에서 채택 / .NET 및 Java를 포함한 많은 플랫폼 및 언어에서 사용가능
: 해시화 반복횟수를 늘려 연산속도를 늦출 수 있어 연산능력이 강화된 Brute-Force공격에 대비 가능
※ Blowfish 알고리즘
: 데이터 암호화 표준(DES)와 국제 데이터 암호화 알고리즘 (IDEA)를 대신하여 사용되는 암호화 알고리즘
: 32비트~448비트의 가변길이의 키를 이용하는 비밀키 블록 암호
※ Brute-Force
: 무차별 적으로 값을 대입하여 해시 알고리즘을의 원본 데이터를 알아내는 공격 기법
Scrypt
- 2012년에 발표된 PBKDF2와 유사한 함수
: 다이제스트를 생성할때 메모리 오버헤드를 갖도록 설계되어 Brute-Force시도시 병렬화 처리가 어려움
: Bcrypt보다 더 경쟁력이 있다고 평가 됨
: 여러 프로그래밍 언어의 라이브러리에서 제공 받을수 있음
기타 알고리즘
- SEED : 한국인터넷진흥원(KISA)에서 개발한 128비트의 대칭키 블록 암호 알고리즘
Refference
blog.naver.com/sol9501/70104119450
jongmin92.github.io/2019/12/18/Java/hash/
ksbsite.tistory.com/12?category=926929
d2.naver.com/helloworld/318732
'Development > Development' 카테고리의 다른 글
[백엔드 개발자 로드맵 2020] 백엔드 서비스 아키텍처 패턴 (0) | 2021.03.17 |
---|---|
[백엔드 개발자 로드맵 2020] 웹 보안 지식 (0) | 2021.03.17 |
[백엔드 개발자 로드맵 2020] 서버 사이드와 클라이언트 사이드 (0) | 2021.02.13 |
[백엔드 개발자 로드맵 2020] CDN (Content Delivery Network) (0) | 2021.02.13 |
동시성 프로그래밍 / 비동기 프로그래밍 (0) | 2021.02.05 |