2022.09.19
지난주는 감기 때문에 고생했던 한주였다.
이번주 암호학부터 공부를 시작한다
암호학
- 대칭키 암호
- 공개키 암호
- 해시함수
- 전자서명
- 인증서
CaeSar가 사용한 최초의 암호화 방식
평문 : attack paris next friday -> shift +2
암호문 : cvvcem rctku pgzv htkfca
암호화키 : shift+2, 복화화키 : shift-2 -> 서로 대칭을 이룸( 대칭키)
(영화 베를린의 암호장면, SHIFT+1 시져암호가 사용되고있다.)
문자를 다른 문자로 바꾸는 것
알파벳 순서를 바꾸는 것
ex) 땅리독는도우 -> 독도는 우리땅
평문 : attac kpari snext frida y 12345 -> 41523
암호문 : aacttrkipaxstne
암호화키 : 12345 -> 41523, 복호화키 ; 41523-> 12345
5x5 매트릭스
ATTAC
KPARI
SNEXT
FRIDA
YOKAY
평문 : attack paris nesxt friday okay
암호문 : aksfytpnrotaeikarxdacitay(세로)
암호화 : 가로로 쓰고 세로로 읽어들인다.
복호화 : 세로로 쓰고 가로로 읽어들인다.
암호화키와 복호화키가 서로 대칭을 이룸 -> 대칭키(Symmetric Key)
암호화키를 알면 복호화키를 알 수 있음 -> 단일키(Single Key)
대칭키는 다른사람이 알면 안됨 -> 비밀키(Secret Key)
한번의 세션에서만 사용 -> 세션키(Session Key)
알파벳 숫자가 26자인 특성을 이용하여 반절인 13개씩나눠 서로 대칭하여 만듬
ex) CVARNCCYR -> Pineapple, EBBXVRF -> ROOKIES
https://rot13.com/
해당 사이트에 접속하여 값을 입력하면 rot13으로 암호화가 가능하다.
영어만 암호화됨
숫자, 특수문자는 암호화 안됨
대/소/숫/특문 94개를 반으로 나누어서 섞어서 사용하는 방식
##python ROT47
def rot47(s):
x = []
for i in range(len(s)):
j = ord(s[i])
if j >= 33 and j <= 126:
x.append(chr(33 + ((j+14)%94))
else:
x.append(s[i])
return ''.join(x)
최초의 표준 대칭키, IBM의 Lucifer System 을 기반으로 만듦
NIST에서 표준으로 지정
1999년 RSA컨퍼런스에서DES를 크래킹시연 표준에서 제외
DES 암호화 사이트
https://www.flashbit.site/ko/des/
블록암호화 방식
표준 대칭키(현재)
SPN(Substitution Permutation Network)
벨기에의 Rijndael을 AES로 채택
128bit, 192bit, 256bit 중에서 선택해서 사용
RC 시리즈
MIT공대의 Rivest교수팀
RC4 : 무선공유기에서 많이 사용되었으나 키를 크래킹하는 방식이 알려져서 최근에는 사용하지 않음 (Kali Linux에서 40분 정도면 크래킹 가능)
RC6은 AES선정할 때 최종라운드까지 갔다가 탈락
Fish 시리즈
브루스 슈나이어라는 유명 암호학자가 만듦
TwoFish : AES선정할 때 최종라운드까지 갔다가 탈락
BlowFish : 안전하기로 유명함
이산대수의 어려움을 이용해서 공개키 방식을 인류 최초로 만듦(1976년)
누구나 개인키와 공개키 한쌍을 가짐(개인키로 공개키를 생성)
개인키는 나 혼자만 보는 것(600), 공개키는 상대방에게 제공하기 위한것(644)
공개키를 상대방에게 제공(평문으로 가도 상관없음, 이메일로 보내도됨, 딴사람이 가져도 상관 없음)
자신의 개인키와 상대방의 공개키를 이산대수 연산해서 생성된 키는 양쪽이 일치하게 됨 -> 대칭키로 사용하면 됨 ( 대칭키를 사용할 필요 없음)
대칭키 키 교환의 문제를 해결 (공개키만 제공했는데 대칭키가 생성되었음)
ID와 PW를 모두 대칭키로 암호화해서 상대방에게 제공하면 됨, 상대방도 같은 대칭키가 있기 때문에 복호화 가능함
ssh_host_ecdsa_key 개인키(Private Key) : 확장자 없음
ssh_host_ecdsa_key.pub 공개키(Public Key) : 확장자가 pub임
누구나 개인키와 공개키 한쌍을 가짐
하나의 키로 암호화 하면, 쌍이되는 다른 키로만 복호화됨
소인수분해의 어려움에 근거
양방향 암호화 가능 : 개인키로 암호화하면 공개키로 복호화, 공개키로 암호화하면 개인키로 복호화
특허가 2001년쯤 만료되어서 무료로 사용가능 -> 상당히 많이 사용 (사실상의 표준 De Facto)
1) 고정길이 출력 : 원문의 길이와 관계없이 해쉬값은 항상 일정ㅇ한 길이로 출력됨
MD5(128bit), SHA-1(160bit), SHA-256(256bit)
2) 일방향 함수 : 해쉬함수와 해쉬값을 알아도 원문 복구는 불가능
3) 충돌 방지 ( 충돌 : 원문이 다른데 해쉬값이 같은 것)
ex) MD5가 충돌될 확률 : 1/(2의128승) >0에 수렴, SHA-1가 충돌될 확률 : 1/(2의160승) -> 0에 수렴
MD5와 SHA-1 은 더이상 안전하지 않다 -> ISMS-P, ISO27001에서 사용하면 안된다고 함(인증안됨)
생성 : 원문의 해시값에 송신자의 개인키로 서명을하고 원문과 함께 보냄
검증 : 서명된 해시값을 송신자의 공개키로 복호화하고 원문의 해시값과 비교해서 일치하는지 확인
수신자와 송신자의 해시값이 일치하면 무결성 검증, 인증, 부인봉쇄 확인됨
무결성(내용변조 x), 인증(송신자 검증), 부인봉쇄(아니라고 하지 못함)
인증서
형식 : X.509v3
발급자, 주체, 주체의 공개키, 서명된 해시값 등
공개키가 올바른지 확인( 주체의 것이 맞는지 검증)
방법은 전자서명과 비슷함
생성 : 원문의 해시값을 구해서 송신자(CA)의 개인키로 서명
검증 : 송신자(CA)의 공개키로 서명된 해시값을 복호화한 후 , 원문(공개키)의 해시값을 구해서 비교해봄
PKI기관
RA : 인증서 신청 업체를 검증하고 등록을 대행하는 역할
CA : 인증서를 발행
RootCA 최상위 인증기관 : 인증기관을 검증
Repository : 인증서를 모아둠
NPKI 미래부 -> KISA -> CA 5개 기관 -> 은행들
GPKI : 행자부
MPKI : 국방부
EPKI : 교육부
인증서 취소목록
-> 일반인들이 조회하기 전까지는 가짜 인증서 확인 어려움
OCSP
온라인에서 실시간으로 인증서의 유효성을 검증하는 프로토콜
PKI (공개키 기반 구조)
1) NPKI (National Public Key Infrastructure)
PAA(정책기관) : 미래부, 방송통신위원회
Root CA : KISA
CA(인증기관) : 금융결제원, 정보인증, 전자인증, Koscom, 무역정보협회
RA(등록기관) : 은행, 증권회사, 대행 업체 등등
2) GPKI, MPKI, EPKI 등등
평문 : 누구나 읽을 수 있는 글
암호문 : 아무도 읽을 수 없는 글
암호화 : 평문을 암호문으로 만드는 것
복호화 : 암호문을 평문으로 만드는 것
암호화키 : 평문을 암호문으로 만드는 규칙
복호화키 : 암호문을 평문으로 만드는 규칙
정보보안기사와 같은 시험에서 자주 나오며, 보안 업무를 함에 있어 중요한 암호학에 대한 공부를 하였다. 중요한 파트이고 얼마 후에 산업기사 시험을 준비하는 입장에서 너무 좋은 학습시간이였던거같다.