< 암호화 >
단방향 암호화와 양방향 암호화가 있습니다.
단방향 암호화는 암호화된 정보로 원본을 알아낼 수 없는 암호화 방식이고,
양방향 암호화는 암호화된 정보로 원본을 알아낼 수 없는 암호화 방식입니다.
쉽게 말해서 양방향 암호화는 복호화가 가능합니다.
이래도 어렵나요? 차근차근 알아봅시다.
< 해시 함수 (Hash) >
단방향
반환값의 길이가 일정
동일한 입력 -> 동일한 출력
빠른 연산 속도
충돌 발생 (다른 입력 -> 동일한 출력)
충돌이 적을수록 좋은 해시함수
두 입력의 동일성 확인을 위해 사용
예시 : MD5, SHA1, SHA2
< 대칭키 (Secret key) >
특정키를 이용해 암호화 -> 동일한 키를 이용해 복호화
"Hello world!" -> key(100) -> "abcdefasdf"
"abcdefasdf" -> key(100) -> "Hello world!"
스트림과 블록으로 나눔
(스트림은 거의 안 쓰이고 블록 알고리즘을 주로 사용)
< 공개키 (Public key) >
공개 키와 비밀 키를 따로 만든다.
공개 키는 이름 그대로 공개해도 되는 키이고,
비밀 키는 이름 그대로 공개하면 안 되는 키이다.
공개 키를 이용해 암호화시킨 메세지가 있다면, 이 메세지는 비밀 키를 이용해서만 복호화가 되게 한다.
비밀 키를 이용해 암호화시킨 메세지가 있다면, 이 메세지는 공개 키를 이용해서만 복호화가 되게 한다.
대표적으로 RSA 암호는 비밀 키로 소인수 2개를 사용하고, 공개 키로 비밀 키의 소인수 2개를 곱한 값을 사용한다.
예를 들어 비밀 키가 13, 37이라 하면, 공개키는 (13 * 37 = )481이다.
481을 이용해 암호화를 시키면 복호화에는 13과 37이 필요해진다.
이 때 13과 37 모두 소인수이기 때문에 에라토스테네스의 체를 이용해서만 481의 약수를 구할 수 있다.
2개의 소인수를 크게 할수록 그 시간이 엄청나게 많이 소요되므로 현실적으로 알 수 없는 비밀키가 되는 것이다.
예시 : RSA, Rabin, DSA, 타원곡선
'프로그래밍 > C++' 카테고리의 다른 글
C++ 실습 - 체이닝 해시 알고리즘 구현 (0) | 2018.02.12 |
---|---|
C++ 실습 - 링크드리스트 (0) | 2018.02.12 |
C++ 문법 - 오버라이딩 (0) | 2018.02.10 |
C++ 문법 - 객체 배열 (0) | 2018.02.10 |
C++ 문법 - 동적할당 (0) | 2018.02.10 |