공인인증서는 A가 B에게 데이터를 보냈는데 이게 진짜 A가 보낸 건지 인증할 수가 없기 때문에
A라는 사람이라는 것을 보증해주는 문서라고 보면 된다.
하지만 아무나 이 인증서를 발급할 수 있으면 A 행세를 아무나 낼 테니까
인증된 기관(CA)으로부터 적절한 절차를 거쳐 인증서를 발급받을 수 있다.
CA(Certificate Authority) 기관 : 암호학에서 인증 기관은 다른 곳에서 사용하기 위한
디지털 인증서를 발급하는 하나의 단위
* 공인인증서 발급 과정
A와 B가 CA 은행에서 공인인증서 발급을 받을 때 A와 B의 공개 키를 은행에서 가져간다.
발급받은 인증서는 자신의 개인키로 1차 암호화를 한 후
비밀번호를 따로 설정해 2중 암호화한다.
그리고 은행의 개인키로 암호화하여 그 은행이 발급해준 인증서가 맞는지 확인할 수 있다.
* 복호화가 되는 암호화가 있고 안 되는 게 있다.
데이터 암호화 표준 DES(Data Encryption Standard) : 대칭키 암호화, 복호화 (56비트)
고급 암호화 표준 AES(Advanced Encryption Standard) : DES 단점 보완, 대칭키 암호화, 복호화 (128비트)
등등
발전할수록 비트의 수가 올라간다는 특징이 있다.
해시(hash) : 다양한 길이를 가진 데이터를 고정된 길이를 가진 데이 퍼로 매핑(mapping)한 값
해시는 복호화가 불가능한 단방향 암호화 기법이다.
고정된 길이의 암호화된 문자열이라는 말은
가변 길이의 데이터 -------> 고정된 길이의 해시값
a | acc175b9c23b47b |
123 | bad2378def34567 |
Hello, world | a32dc9934eab220 |
^^^^^^^^^^^^ | acc175b9c23b47b |
해시값을 사용하는 한 가지 예가 회원가입 상황이다.
회원가입을 할 때 ID : ssar / PW : 1234라는 정보를 넣는다.
이때 회원 DB에는 ID : ssar과 PW는 1234를 해시화 하여 A38BB라는 값이 저장된다.
로그인을 할 때 ID : ssar / PW : 1234를 기입하면
PW를 해시화 해서 A38BB와 비교하여 일치한다면 로그인에 성공하게 된다.
또 다른 예시를 들어보자.
하나의 자화상을 미술협회에 등록하면서 B7777이라는 정품 코드를 받게 된다.
만약 이 그림의 복제품을 만들어서 되팔려고 할 때
클라이언트는 그 그림의 해시값을 B7777 코드와 비교해야 한다.
한글자라도 바뀌면 해시값이 완전히 바뀌어 버리기 때문에 복호화가 되지 않는 암호화라는 점에서
매우 안전한 암호화 기법이다.
이런 해시함수도 복호화 할 수 있는 방법이 있다.
레인보우 테이블(rainbow table) : 해시함수를 사용하여 만들어 낼 수 있는 값들을 대량으로 저장한 표
보통 해시함수를 이용하여 저장된 비밀번호로부터 원래의 비밀번호를 추출해 내는 데 사용된다.
이런 레인보우 테이블을 예방할 수 있는 방법이 솔트(Salt)이다.
솔트(salt) : 데이터, 비밀번호, 통과암호를 해시 처리하는 단방향 함수의 추가 입력으로 사용되는 랜덤 데이터
솔트는 레인보우 테이블과 같은 미리 계산된 테이블을 사용하는 공격을 방어한다.
예를 들어 네이버에 비밀번호를 저장할 때
5678이라는 데이터를 저장할 때 네이버에서 5678_hello 라는 값을 저장해 해시화 한다.
이때 네이버의 솔트는 hello가 되는 것이다.
_hello가 추가됨으로써 완전히 다른 해시값이 나오게 되고
레인보우 테이블에서 5678의 해시값을 알고있더라도 솔트 값을 추가함으로써 보안을 강화할 수 있다.
[출처]
https://cafe.naver.com/metacoding
메타코딩 유튜브
https://www.youtube.com/c/%EB%A9%94%ED%83%80%EC%BD%94%EB%94%A9