네트워크, 시스템보안
암호화
mimimin
2022. 5. 3. 17:31
대칭키(기밀성), 공개키(인증, 기밀성), 해쉬함수(무결성)
1) 대칭키 (= 비밀키, 단일키, 세션키)
- 장) 속도가 빠름 → 데이터 암복호화 유리
- 단) 키 전달 어려움, 키 개수 많음(N(N-1)/2)
- ex) DES, 3DES, AES(표준 대칭키)
- 국내대칭키: SEED, ARIA, HIGHT, LEA → 뒤에 3개는 경량 암호화로 모바일 시대를 위해 만든 것
- 유명한 대칭키: RC6, Blowfish 등
- 대칭키의 원리: 치환, 순열(전치), 매트릭스 등 → AES는 SPN구조(Substitution(치환), Permutaion(순열, 전치), Network)
2) 공개키
- 장) 인증 가능, 기밀성 제공, 키 전달의 문제 해결(누구나 개인키 공개키 한쌍 가짐 → N명의 사용자, 2N개 필요)
- 단) 대칭키에 비해 속도가 100 ~ 1000배 느림
- 따라서 대칭키(=세션키)를 암/복호화 할 때 공개키 사용
- Diffie-Hellman: 세션키를 교환하지 않고, 자신의 개인키와 상대방의 공개키를 연산을 통해 세션키를 생성, 이산대수 (단점: MITM - Man In The Middle attack)
- RSA: 소인수분해의 어려움에 근거, 양방향 암호화 지원(개인키로 암호화하면 공개키로 복호화(인증), 공개키로 암호화하면 개인키로 복호화)
- ECC(타원 곡선 암호화): 짧은 키 길이로 강력한 암호화 지원 → 하드웨어에서 동작(모바일 등)
- cf) 암호화 강도 비교: ECC160bit와 RSA1024bit와 비슷한 수준의 암호화 제공
- 키가 길어지면 연산량이 많아 발열 등 발생 가능
3) Hash Function
- 특징: 고정길이 출력, 역연산 불가, 충돌방지
- MD5, SHA1 → 일부 크래킹 가능 → 사용하면 안됨(인증 안해줌), SHA-2(256bit): 공동인증서, Bitcoin에서 사용
- 무결성(Integrity): 내용이 바뀌지 않았다는 것 증명 → 원문이 바뀌면 해쉬값이 바뀜(→ 해쉬값만 보고도 확인 가능)
4) 전자서명
- 원문의 해쉬값에 송신자의 개인키로 서명
- 무결성, 인증, 부인방지 (기밀성은 제공하지 않음)
- 검증: 송신자의 공개키로 서명을 복호화하면 헤쉬값이 나옴, 원문의 해쉬값을 계산해서 비교해보면 됨
5) 인증서
- 공개키의 해쉬값에 인증기관의 개인키로 서명
- 공개키의 주인을 확인해주는 효과 → 믿고 사용 가능
- 실제 인증서 확인: 인터넷 옵션 > 내용 > 인증서
6) PKI(Public Key Infrastructure)
- 최상위 인증기관(Root CA): 인증기관을 인증
- 인증기관(CA): 인증서를 발급
- 등록기관( RA): 인증기관의 인증서 발급을 위해서 사용자 검증, 서류 접수 등
7) SSL(Secure Socket Layer) (Socker: IP 주소 + Port 번호 → 비표준용어)
- Netscape에서 웹서버와 웹브라우저간 암호화를 위해서 많듦 → 취약점이 너무 많았음
- 표준화하면서 이름을 TLS(Transport Layer Security)로 업그레이드(취약점 해결)
- 웹서버의 인증서(공개키 + 기타정보)를 클라리언트에 제공(좌물통 모양이 보임, TCP443포트 사용)
- 웹서버는 세션키를 생성해서 웹서버의 공개키로 암호화해서 제공
- 양쪽이 모두 세션키를 가지게 됨 → 데이터를 세션키로 암호화해서 양방향 기밀성 가능
[해시 함수 실습]
kali linux에서 해시함수 실습 가능
- md5
- sha1
- sha256