1) 암호화
- 대칭키 방식
- 치환(S)과 순열(P) → 현재 SPN방식 사용 ( N : 네트워크)
- 암호화 키와 복호화 키 서로 대칭 → 대칭키(Symmetric Key)
- 암호화 키 알면 복호화 키 알 수 있음 ----> 단일키(Single Key)
- 대칭키는 다른 사람이 알면 안 됨 ----------> 비밀키(Secret Key)
- 한 번의 세션에서만 사용 -------------------> 세션키(Session Key)
- Matrix 방식
- 암호화 : 가로로 쓰고 세로로 읽어 들임
- 복호화 : 세로로 쓰고 가로로 읽어 들임
- ROT13 방식의 단점
- 영어만 암호화 (숫자, 특수문자 암호화 X)
→ ROT47 방식 등장
- ROT47
- 대/소/숫/특수문자 94개를 반으로 나눠 섞어 사용
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)
- 암호화하는 이유
- 기밀성(Confidentiality) : 내용이 노출되지 않도록 하는 것
- 무결성(Integrity) : 내용이 변조되지 않도록 하는 것
- 인증(Authentication) : 올바른 사용자임을 증명하는 것
- 부인봉쇄 : 아니라고 하지 못하는 것
- 대칭키(Symmetric Key) = Secret Key = Session Key
- 암호화 키와 복호화 키가 서로 대칭 → 사실상 하나의 키
- Dr.Feistel 방식 : Lucifer, DES, 3DES 등
- DES
- 블록 암호화 방식 : 데이터를 64bit(블록)씩 잘라 암호화를 하는데, 키의 길이도 64bit
- 키는 64bit인데, 실제 암호화 키는 56bit, 나머지 8bit를 패리티 비트로 채움
- SSL / TLS
- 웹브라우저와 웹서버 간 암호화를 하기 위한 프로토콜
- Netscape에서 SSL(Secure Socket Layer)를 만듦 → 웹 암호화 시작
- SSL 1.0, SSL 2.0 → 취약점 발견되어 SSL3.0을 만들었지만 취약점 있음
- 표준화하기로 결정하고 이름을 TLS(Transport Layer Security)로 변경
- SSL3.0의 업그레이드 버전으로 TLS1.0을 만듦
- 지금 SSL은 사용X 관용적으로 SSL이라고 함 (실제론 TLS를 사용하고 있음)
- 현재 TLS는 1.3 버전 사용
2) Hash Function
- 해시함수 특징
- 고정길이 출력 : 원문 길이와 관계없이 해쉬 값은 항상 일정한 길이로 출력
ex) MD5(128bit), SHA-1(160bit), SHA-256(256bit)
- 일방향 함수 : 해쉬 함수와 해쉬값을 알아도 원분 복구는 불가능
- 충돌 방지
※ 구글 보안팀 (프로젝트 제로)
- 세계적인 해커들을 고용해 각종 테스트, 크래킹 등 함
- 목적 : 제로데이 취약점 알아내는 것 (알려지지 않은 취약점을 알아내는 것)
- https://shattered.io/](https://shattered.io/ SHA-1의 충돌 쌍 공개
- MD5와 SHA-1은 더 이상 안전하지 않다. → ISMP-P, ISO27001에서 사용하면 안 됨 (인증 안됨)
- 전자서명
- 생성 : 원문의 해시값에 송신자의 개인키로 서명 후 원문과 함께 보냄
- 검증 : 서명된 해시값을 송신자의 공개키로 복호화한 후, 원문의 해시값과 비교해 일치하는지 확인
- 일치하면 무결성 검증 (내용 변조되지 않았음), 인증 (송신자에 대한 검증), 부인봉쇄 확인 (아니라고 하지 못함)
ex) 은행 이체 마지막 단계 "XX은행 YYY계좌로 얼마를 이체"하겠습니까? 공인인증서가 보여짐 → 비밀번호 입력(개인키 사용:서명)
- 공개키에 대한 검증이 필요
- 진짜 거래 상대의 공개키인가? ← 인증기관이 발급 ←인증기관이 맞는지? ← 루트 인증기관 ← OS에 들어있음 (인터넷 옵션)
- http는 평문으로 전송 : TCP80 사용
- https는 암호문으로 전송 : TCP443 사용 → TLS가 동작하면서 인증서 받음 (인증서 안엔 방문한 웹사이트의 공개키가 들어있음) → 세션키 생성한 다음, 서버의 공개키로 암호화해서 보내줌 → 서버는 자신의 개인키로 복호화하면 세션키 나옴 : 양쪽이 세션키 갖게 됨)
- 인증서(Certificate)
- 형식 : X.509v3
- 인증서 주요 내용 : 서명 알고리즘, 유효기간, 발급자, 주체, 주체의 공개키, 서명된 해시값 등
- 공개키가 올바른지 확인 (주체의 것이 맞는지 검증)
- 전자서명 방법과 비슷
- 생성 : 원문(공개키)의 해시값 구해 송신자(CA)의 개인키로 서명
- 검증 : 송신자(CA)의 공개키로 서명된 해시값을 복호화한 후, 원문(공개키)의 해시값을 구해 비교
- PKI (공개키 기반 구조)
1) NPKI (National Public Key Infrastructure)
- PAA(정책기관) : 미래부
- Root CA : KISA
- CA(인증기관) : 금융결제원, 정보인증, 전자인증, Koscom, 무역정보협회
- RA(등록기관) : 은행, 증권회사, 대행업체 등
2) GPKI, MPKI, EPKI 등
'SK shieldus Rookies 9기 > 시스템 ,네트워크 보안' 카테고리의 다른 글
시스템/네트워크 보안 기술 수업 5일차 (22/09/21) (0) | 2022.09.27 |
---|---|
시스템/네트워크 보안 기술 수업 4일차 (22/09/20) (0) | 2022.09.27 |
시스템/네트워크 보안 기술 수업 2일차 (22/09/16) (0) | 2022.09.16 |
시스템/네트워크 보안 기술 수업 1일차 (22/09/15) (0) | 2022.09.15 |