암호화 알고리즘은 총 3가지
1. 대칭형 암호(비밀키)
2. 비대칭형 암호(공개키)
3. 단방향 암호
1. 대칭형 암호
암호화 키 = 복호화 키
미국 표준 방식(AES)을 가장 보편적으로 사용 (DES 암호화 알고리즘을 대체하는 알고리즘)
그 외 RC4, Twofish, Serpent, Blowfish, CAST5, 3DES, IDEA 등 알고리즘이 존재
국내에서 개발된 SEED, ARIA라는 알고리즘도 있다.
AES는 보안성이 뛰어남
AES의 키는 알고리즘에서 요구되는 128비트 또는 256비트 길이를 사용해야 하므로 16바이트 또는 32바이트를 사용
2. 비대칭형 암호
암호화 키 복호화 키 다름
대칭형 암호는 키를 어떻게 수신 측에 전달할 것인가에 대한 문제가 있음. 이 키를 털리면 평문(암호화되지 않은)이 바로 알 수 있게 되어버림. 이 '키 배송'문제를 해결한 것이 비대칭형 암호
비대칭형 암호화를 하면 하나의 키 쌍이 생김.(수학적 밀접한 관계를 가진다.) 두 개의 키 중 비밀로 보호하면 '비밀키', '개인키'라 하고 다른 하나는 공개해도 상관없는 키라 하여 '공개키'라 함
하지만 대칭형암호에 비해 암/복호화가 현저하게 느림 따라서 비대칭형 암호를 이용하여 대칭형 암호의 키를 배송하고 실제 암호문은 대칭형 암호를 사용하는 식으로 상호보완적으로 이용
Diffie-Hellman 키 교환, DSS, EIGamI, ECC, RSA 암호화 등이 있다.
3. 단방향 암호
암호화는 가능하나 복호화는 안 되는 암호화 기법
주로 패스워드 같은 부분은 단방향으로 암호화. 검증할 때는 입력받은 값을 암호화하여 비교.
주로 해시 기법을 사용하며 최소한 SHA-256, 가능하면 SHA-3을 쓰는 것이 좋다.
나머지는 취약점이 발견된 상태.
4. 암호화 분류
5. 암호 알고리즘 종류
블록 암호
국내에서 개발된 암호 알고리즘은 KISA에서 명세서와 소스코드를 모두 무료로 다운로드하여 사용할 수 있다.
-
DES: 구 미국 표준. 56비트 키를 사용한다.
-
3DES: DES를 3번 반복한다. DES로 키를 바꿔가며 암호화→복호화→암호화를 해서 키 길이를 늘리는 기법이다. 2 키를 사용하는 경우 112비트, 3 키를 사용하는 경우 168비트의 키 길이를 가지기 때문에 현재도 제법 안전성은 있다고는 하지만, 느리다는 문제가 있다.
-
AES: 현재 표준 대칭키 암호화 기법. 128/192/256비트 키를 사용한다.
-
SEED: 대한민국의 국가 암호 표준. 128비트 키를 사용하며 2005년에 ISO/IEC 국제 표준으로 제정.
-
HIGHT: 저전력, 경량 환경에서 사용할 수 있도록 개발된 64비트 블록암호 알고 리즘. 코드 사이즈가 작고 AES보다도 속도가 빠르다. 2010년 12월 ISO/IEC 국제 표준으로 제정.
-
ARIA: SEED 이후로 나온 대한민국의 국가 암호 표준. 128/192/256비트 키를 사용한다. (AES와 동일)
-
LEA: 빅데이터, 클라우드, 모바일 등의 환경에 맞게 2013년에 국내 개발된 128비트 경량 암호 알고리즘. AES의 1.5~2배의 속도를 낼 수 있다.
-
블로피시(Blowfish)
-
공개키 암호
-
RSA: 공개키 암호화 기법의 사실상 표준. 매우 큰 수의 소인수분해가 수학적으로 어렵다는 이론에 기반한다.
-
ECC: RSA의 키 길이가 너무 긴 결점을 보완하기 위해 타원곡선함수를 이용한 암호화 기법. 비교적 최신 기법이다.
-
-
암호학적 해시 함수
-
MD5: 현재는 안전하지 않다.
-
SHA
-
bcrypt: 블로피시(Blowfish)라는 블록 암호 알고리즘을 해시 함수로 변형한 것이다.
-
PBKDF2: 미국 정부기관에서 승인할 정도로 검증된 암호학적 해시 알고리즘이다.
-
scrypt: PBKDF2의 강화판. 굼벵이 같은 해싱 속도로 유명하다(...)
-
참고
https://jusungpark.tistory.com/34
https://namu.wiki/w/%EC%95%94%ED%98%B8%20%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98#fn-2
'프로그래밍 > c#' 카테고리의 다른 글
[c#] 쓰레드 동기화 클래스 1(Lock, Monitor) (0) | 2019.10.08 |
---|---|
[c#] Thread Safe (쓰레드 동기화) (0) | 2019.10.08 |
[c#] 이벤트(event)와 델리게이트(delegate) (0) | 2019.10.08 |
[Tip] 프로그램 소스코드를 공개하는 사이트 모음집 (0) | 2019.10.02 |
[c#] Bitmap.Clone() vs new Bitmap (0) | 2018.09.04 |
댓글