맨땅에 코딩
공통 - 암호학 기초 본문
*화이트햇 스쿨 2기에서 이수한 이론교육 내용을 바탕으로 작성되었습니다.
1. "암호학 기초" 개요
보안통신(Securing Communications)
- 정보시스템 보안의 3가지 기본 목표
1. 기밀성(Confidentiality)
2. 무결성(Integrity)
3. 가용성(Availability)
- 안전하게 데이터 주고 받는 보안 통신을 하려면?
→ 데이터 기밀성(Data Confidentiality
- 인가 받은(authorized) 사용자만 메시지를 읽을 수 있음
→ 데이터 무결성(Data Integrity)
- 메시지가 수정되지 않았음을 확인할 수 있음
→ 데이터 출처 인증(Origin Authentication)
- 메시지의 출처와 내용이 수정되지 않았음을 확인할 수 있음
→ 데이터 부인방지(Data Non-Repudiation)
- 송신자가 메시지를 보낸 사실, 그 내용을 부정할 수 없음
→ 접근 통제(Access Control)
- 승인된 사용자만 데이터/단말기에 접근해야 함
암호기술(Cryptography)
- 암호기술
→ 통신 당사자 간 메시지 전달 과정을 보호하고 컴퓨터에 저장된 메시지를 보호하기 위한 수학적 기술
- 암호기술의 용어
→ Cryptology(암호학)
- “비밀코드(secret codes)”를 만들거나 해독하는 학문
→ Cryptography(암호기술)
- “비밀코드”를 만드는 것
→ Cryptanalysis (암호분석)
- “비밀코드”를 해독하는 것
→ Crypto (암호)
- 가장 포괄적인 용어
케르크호프스의 원리 (Kerckhoffs’ Principle)
- 프랑스 언어 학자, 암호 학자
- In 1883 in le Journal des Sciences Militaires (Journal of Military Science) entitled La Cryptographie Militaire (Military Cryptography)
- 실용적인 암호 설계의 6가지 원칙
→ 시스템은 수학적으로는 아니더라도 실질적으로 해독할 수 없어야 한다.
→ 비밀을 요구하지 않아야 하며, 적의 손에 넘어가도 문제가 되지 않아야 한다.
→ 키를 전달하고 기억할 수 있어야 하며, 통신원이 마음대로 키를 변경하거나 수정할 수 있어야 한다.
→ 전신 통신에 적용 가능해야 한다.
→ 휴대할 수 있어야 하며, 여러 사람이 취급하거나 조작할 필요가 없어야 한다.
→ 시스템은 사용하기 쉬워야 하며, 사용자가 긴 규칙 목록을 알고 준수하도록 요구해서는 안 된다.
암호 알고리즘과 키 길이
- 용어 정의
→ 안전성 수준
- 시스템이 어느 정도의 보안강도를 만족해야 하는지를 의미
→ 완전한 탐색 (exhaustive search)
- 모든 가능한 키를 찾아내는 것
→ N비트 키: 2^N개
- 이 중에서 키를 찾기 위해서는 평균적으로 2^N-1 번의 시도 필요
→ 보안강도
- 암호 알고리즘이나 시스템의 암호키 또는 해시함수의 취약성을 찾아내는데 소요되는 작업량을 수치화한 것
- 예) 112비트: 2112번의 계산을 해야 암호키 또는 암호 알고리즘의 취약성을 알아낼 수 있음을 의미
- 암호 알고리즘과 키 길이 선택 기준
→ 암호 알고리즘과 키 길이는, 암호 알고리즘의 안전성 유지기간과 보안강도별 암호 알고리즘 키 길이 비교표, 암호키의 사용 유효기간을 기반으로 선택함
암호기술의 활용
암호기술의 분류
- 일방향 암호기술
→ 해시함수
- Modification Detection Code (MDC) → 무결성
- 예 ) MD5, SHA -2, SHA - 3
- Message Authentication Code (MAC) → 무결성 & 인증
- 예 ) HMAC (Key -Hashed MAC)
- 양방향 암호기술
→ 대칭키 암호기술
- 스트림 암호기술 → 기밀성
- 예 ) RC4
- 블록 암호기술 → 기밀성 , 인증
- 예 ) AES, SEED, HEIGHT
→ 비대칭키 암호기술
- 공개키 암호기술 → 기밀성 , 인증 , 부인방지
- 예 ) DH, RSA, ElGamal, ECC
2. 무결성과 인증 (Integrity and Authenticity)
암호 해시함수(Cryptographic Hash Functions)
- 해시(Hash)는 데이터의 무결성을 확인하는데 사용됨
→ 물리공간에서는?
- 문서에 직접 서명
- 문서와 서명이 물리적으로 결합
→ 사이버공간에서는?
- 암호 기술을 사용 → 메시지 다이제스트(MD: Message Digest)
- 메시지와 메시지 다이제스트는 디지털 정보이므로 전자적으로 분리 가능
- 메시지 다이제스트는 변경되어서는 안됨
- 해시 함수는 다양한 길이의 메시지를 입력 받아, 일정한 고정 길이 값으로 출력함
→ 해시는 일방향(one-way) 수학 함수에 기반함
- 해시 값을 만드는 것은 쉽지만, 해시 값으로 원래의 값을 찾는 것은 매우 어려움
- 예) 11 mod 4 = 3
→ 출력값
- 메시지 다이제스트(message digest)
- 디지털 지문(digital fingerprint)
암호 해시함수(Cryptographic Hash Functions)
- 안전한 암호 해시함수
→ 서로 다른 두 개의 메시지가 같은 해시 값을 만들 확률이 매우 낮음
→ 메시지의 내용이 변경되면, 해시 값도 변경됨
- 암호 해시함수의 3가지 기준 요건
→ 프리이미지 저항성(preimage resistance)
- 어떤 MD가 주어졌을 때 (메시지 내용은 모름), 같은 MD를 갖는 메시지를 만들 수 있음
→ 제2 프리이미지 저항성(second preimage resistance)
- 어떤 메시지와 이것의 MD가 주어졌을 때, 같은 MD를 갖도록 메시지를 변조할 수 있음
→ 충돌 저항성(collision resistance)
- 공격자는 하나의 MD에 대해 서로 다른 메시지를 선택할 수 있음
비둘기 집 원리(Pigeonhole Principle)
- 만약에 n+1 마리의 비둘기가 n 개의 비둘기 집에 들어가 있다면 적어도 한 비둘기 집에는 두 마리의 비둘기가 들어있다는 뜻
- 일반화된 비둘기 집 원리 버전
→ 만약 kn+1 마리의 비둘기가 n 개의 비둘기 집에 들어가 있다면
→ 적어도 한 개의 비둘기 집에는 k+1 마리의 비둘기가 들어가 있어야 함
- 예) 해시함수에 적용되는 비둘기 집 원리
→ 메시지 길이가 6 비트이고, MD 길이는 4 비트이면,
→ 가능한 메시지의 개수는 2^6=64개, MD (비둘기 집)의 총 개수는 2^4=16개
→ 따라서, n=16 이고 kㆍn+1=64 이므로, 3 < k < 4 임
→ 그러므로 하나의 MD는 적어도 k+1=4 개의 메시지와 대응함
생일 문제(Birthday Problems)
- 한 교실에 k명의 학생이 있을 때 (학생→메시지, 생일→MD)
→ 상황 #1 (메시지 다이제스트를 알고 있음)
- 미리 지정한 특정 일자와 생일이 같은 학생이, 적어도 1 명 있을 확률이 50% 이상이 되려면 , k 의 최소값은 얼마인가? 253 명
→ 상황 #2 (메시지와 메시지 다이제스트를 알고 있음)
- 미리 지정한 어떤 학생과 그 생일이 같은 학생이 적어도 1 명 있을 확률이 50% 이상이 되려면, k 의 최소값은 얼마인가? 254 명
→ 상황 #3 (MD 가 같은 두 개의 메시지 존재)
- 임의의 한 학생이 , 적어도 1명의 학생과 생일이 같을 확률이 50% 이상이 되려면 , k 의 최소값은 얼마인가? 23 명
→ 상황 #4 (MD 가 같은 두 개의 메시지 존재 )
- 임의의 한 학생이, 다른 교실의 k 명 중 적어도 1명의 학생과 생일이 같을 확률이 50% 이상 되려면 , k 의 최소값은 얼마인가? 16 명
암호 해시 동작(Cryptographic Hash Operation)
- 해시 동작의 수학적 표현: h=H(x)
→ 해시 함수 H는 입력 메시지 x를 받아, 고정 길이의 해시 값 h를 출력함
- 암호 해시 함수의 특성
→ 입력 메시지의 길이는 고정되어 있지 않음
→ 출력 해시 값의 길이는 고정되어 있음
→ 입력 메시지 x를 이용해서 H(x)를 계산하는 것은 상대적으로 쉬움
→ H(x)는 일방향 함수이며, 역으로 계산할 수 없음
→ H(x)는 충돌하지 않음
- 서로 다른 입력 값은 서로 다른 해시 값을 출력함
- 해시 함수는 메시지의 무결성을 확인하는데 사용됨
→ 예) Alex에게 100$를 송금했을 때
- 송신자는 송금 메시지를 해시함수에 입력하여 해시값 4ehiDx67NMop9를 얻음
- 이 해시값을 메시지에 붙여서 수신자에게 송신함 (메시지와 해시값은 모두 평문)
- 수신자는 메시지로부터 해시값을 분리하고, 메시지를 송신자가 사용한 것과 동일한 해시함수에 입력함
- 그 결과값이 수신된 해시값과 같으면 메시지 변조가 없는 것이고, 그렇지 않다면 무결성을 신뢰할 수 없는 것임
- 송신자를 확인(출처 인증)할 수 있는가?
→ 해시 함수 자체에는 송신자에 대한 유일한 식별 정보가 사용되지 않음
- 누구나 해시 함수를 이용해 해시 값을 만들 수 있음 →
- 따라서, 해시 값을 만드는 과정은 중간자 공격(man-in-the-middle attack)에 취약함
출처 인증(Origin Authentication)
- 출처 인증과 무결성을 모두 보장하려면, 비밀키 해시 메시지 인증 코드(HMAC)를 사용함
→ Keyed-hash message authentication code(HMAC)
- 비밀키(secret key)를 메시지 입력에 함께 사용함
- SSL, IPsec, SSH에 사용됨
→ HMAC 값 생성하기
- 메시지와 비밀키를 함께 해시함수에 입력해서 해시값(HMAC)을 구함
- 이 값을 메시지에 붙여서 수신자에게 송신함
→ HMAC 값 확인하기
- 수신자는 받은 메시지에서 해시값을 분리하고, 메시지를 비밀키와 함께 송신자가 사용한 것과 같은 해시 함수에 입력함
- 계산된 해시값이 수신한 해시값과 같으면 메시지는 수정되지 않은 것임
- 그리고, 비밀키를 갖고 있는 송신자가 보낸 것이므로 송신자도 인증됨
- HMAC은 메시지 인증에 사용됨
→ HMAC 값이 일치하면 상대방이 비밀키를 정당하게 갖고 있다고 생각할 수 있음
→ 송신자와 수신자만 비밀키를 알고 있어야 함
→ 비밀키는 안전하게 사전에 공유되어야 함
잘 알려진 해시함수
- MD (Message Digest)
→ MD4
- Rivest가 1990년에 만든 일방향 해시 함수
- 128비트의 해시 값
- Dobbertin에 의해 충돌 발견 방법이 고안
- 현재는 안전하지 않음
→ MD5
- Rivest가 1991년에 만든 일방향 해시 함수
- 128비트의 해시 값
- 2005년, MD5 해시에 대한 충돌 방법 발견 (중국)
- 사용을 권장하지 않음
→ RIPEMD-160
- 1996년, Hans Dobbertin, Antoon Bosselaers, Bart Preneel 제작
- 160비트의 해시 값
- 비트코인에서 사용
- RIPEMD-128, RIPEMD-256, RIPEMD-320
- SHA (Secure Hash Algorithm)
→ SHA-1
- 1995년, NIST 제작
- 160비트의 해시 값, 메시지 길이 상한 264비트 미만
- 2005년 취약점 발견
→ SHA-2
- 2002년, NIST 제작
- SHA-256: 256 비트 출력, 메시지의 길이 264 비트 미만
- SHA-384: 384 비트 출력, 메시지의 길이 2128 비트 미만
- SHA-512: 512 비트 출력, 메시지의 길이 2128 비트 미만
→ SHA-3
- SHA-1의 강한 충돌 내성 침해(2005년)
- 2007년, NIST 차세대 일방향 해시함수 선정 개시, 2012년 선정 완료
→ KECCAK(케챡)을 표준으로 선정
- 4가지 해시함수 : SHA3-224/256/384/512 (출력)
- 특징
→ SHA-2와 전혀 다른 구조: 스펀지 구조
→ 구성이 투명하여 구조를 해석하기 쉬움: 듀플렉스 구조
→ 다양한 디바이스에서 구동되고, 조합 형태로도 양호
→ 하드웨어 상에 내장 시 높은 고성능
해시함수의 한계
- 해시함수는 「조작 또는 변경」을 검출할 수 있지만, 「거짓 행세」는 검출 못함
→ 그래서 인증(authentication)과 부인방지(non-repudiation) 기술이 필요함
- 인증: 메시지가 올바른 송신자로부터 온 것임을 확인하는 것
- 부인방지: 이 파일이 정말로 앨리스가 작성한 것인지를 확인하는 것
- 메시지 인증 코드로 해결 할 수 없는 문제
→ 제3자에게 증명하기
- 앨리스로부터 메시지를 받은 밥이 「이 메시지는 앨리스가 보낸 것이다」라는 것을 제 3자인 빅터에게 증명할 수 있을까?
→ 빅터가 검증을 하기 위해서는 밥이 갖고 있는 키를 빅터에게 알려줘야 함
→ 그런데 그 키는 앨리스와 밥 모두가 동일한 키를 가지고 있으므로 둘 중 누가 작성했는지 말할 수 없음
→ 부인 방지
- 밥이 MAC 값이 포함된 메시지를 받음으로써, 이 메시지의 출처가 앨리스임을 확신할 수 있음
- 하지만 앨리스가 전송 자체를 부정할 경우 제3자에게 이 사실을 증명 할 수 있을까?
→ 메시지 인증 코드로는 부인 방지(nonrepudiation) 불가
- 공개키 암호기술을 이용하는 디지털 서명 필요
→ Digital Signature (DS): 해시함수와 공개키 암호기술을 이용
3. 기밀성 (Confidentiality)
데이터 기밀성(Data Confidentiality)
- 데이터 기밀성(Data Confidentiality)
→ 인가 받은(authorized) 사용자만 메시지를 읽을 수 있음
- 데이터 기밀성을 제공하는 데 사용되는 암호화는 키를 사용하는 방식에 따라 구분
→ 대칭키 암호기술
- 각 통신 당사자가 미리 공유한 키를 사용하여 암호화/복호화를 할 수 있음
- 스트림 암호, 블록 암호
- 예) DES, 3DES, AES, SEED, HIGHT, ARIA, LEA
→ 비대칭키 암호기술
- 각 통신 당사자의 공개키/개인키를 사용하여 키를 미리 공유하지 않고 암호화/복호화를 할 수 있음
- 예) RSA, Rabin, ElGamal, ECC
- 대칭키 암호기술과 비대칭키 암호기술 비교
대칭키 암호화(Symmetric Encryption)
- 대칭키 암호기술은 동일한 사전 공유 키(비밀 키)를 사용하여 데이터를 암호화/복호화함
- 대칭키 암호기술은 비대칭 암호기술보다 CPU 리소스를 덜 사용하기 때문에 VPN 트래픽에 일반적으로 사용됨
- 안전성은 키의 길이가 길수록 안전해짐
→ 대부분의 암호화 키는 112비트에서 256비트 사이에서 선택함
→ 대칭키 암호기술은 스트림 암호 또는 블록 암호로 분류됨
- 대칭키 암호의 용도
→ 공개 채널로 전달되는 메시지에 대한 기밀성 보장
→ 기억 장치에 저장되는 데이터에 대한 기밀성 보장
→ 개체 인증을 위해 사용
- 엘리스와 밥은 비밀키 Kab를 공유
- 밥은 랜덤수 Nb를 생성해서 엘리스에게 전달
→ Nb는 이번 세션을 위해 처음 사용된 값이므로 이 메시지의 최신성(Freshness)을 검증 할 수 있음
→ 랜덤수를 Nonce (Number used just ONCE)라고 함
- 엘리스는 Kab로 Nb를 암호화해서 밥에게 전달
→ Kab는 엘리스와 밥만 알고 있으므로 밥은 엘리스가 회신하였다는 것을 확신 할 수 있음 ▪
→ 메시지 무결성 검증을 위해 사용
- Message Authentication Code (MAC): CBC (Cipher Block Chaining)
- 스트림 암호
→ 스트림 암호는 일반 텍스트를 한 번에 1바이트 또는 1비트씩 암호화함
- 스트림 암호는 기본적으로 블록 크기가 1바이트 또는 비트인 블록 암호임
→ 스트림 암호는 데이터가 지속적으로 암호화되기 때문에 일반적으로 블록 암호보다 빠름
- 예) GSM 휴대폰 통신을 암호화하는 데 사용되는 RC4 및 A5가 있음
- 블록 암호
→ 블록 암호는 고정 길이의 일반 텍스트 블록을 64비트 또는 128비트의 암호 텍스트 블록으로 변환함
→ 일반적인 블록 암호에는 64비트 블록 크기의 DES와 128비트 블록 크기의 AES가 있음
비대칭키 암호화(Asymmetric Encryption)
- 공개 키 알고리즘이라고도 하며, 암호화 키와 복호화 키가 서로 다르게 설계되어 있음
- 비대칭 알고리즘은 공개 키와 개인 키를 사용함
- 두 키 모두 암호화 프로세스를 수행할 수 있지만 복호화에는 쌍을 이루는 키가 필요함
→ 예) 공개 키로 암호화된 데이터를 해독하려면 개인 키가 필요함
- 비대칭 알고리즘은 기밀성과 인증을 제공함
- 비대칭 암호화는 512비트에서 4,096비트 사이의 키 길이를 사용할 수 있음
→ 비대칭 알고리즘은 대칭 알고리즘보다 훨씬 느림
- 비대칭 알고리즘은 키를 미리 공유하지 않고 기밀성을 제공하는 데 사용될 수 있늠
→ 하지만, 속도 때문에 일반적으로 짧은 메시지(예, 비밀 키) 암호화에 사용함
- 비대칭 알고리즘으로 기밀성 보장
→ 공개 키(암호화) + 개인 키(암호 해독) = 기밀성
- 공개 키를 사용하여 데이터를 암호화할 때는 반드시 개인 키를 사용하여 데이터를 복호화함
- 오직 한 호스트만 개인키를 가지고 있으므로 기밀성이 유지됨
- 비대칭 알고리즘으로 인증, 부인방지
→ 개인 키(암호화) + 공개 키(암호 해독) = 인증, 부인방지
- 한 호스트만 개인 키를 가지고 있기 때문에 해당 호스트만이 메시지를 암호화하여 발신자를 인증할 수 있음
- 호스트가 공개 키를 사용하여 메시지를 성공적으로 해독하면 개인 키가 메시지를 암호화한 것으로 신뢰 되어 발신자가 누구인지 알 수 있으므로, 부인방지 할 수 있음
- 비대칭 알고리즘으로 무결성 보장
→ 두 가지 비대칭 암호화 프로세스를 결합하면 메시지 기밀성, 인증 및 무결성을 제공함
→ 예) 밥의 공개 키로 메시지를 암호화하고, 앨리스의 개인 키로 암호화된 해시를 암호화함
1. 앨리스가 밥의 공개키로 메시지를 암호화 → 기밀성
2. 앨리스가 자신의 개인키로 해시값을 암호화 → 인증
3. 밥은 앨리스의 공개키로 해시값을 복호화 → 무결성
4. 밥은 자신의 개인키로 메시지를 복호화 → 기밀성
4. 공개키 암호기술 (Public Key Cryptography)
키 배송 문제 (Key Distribution Problem)
- 키 배송 문제
→ 대칭 암호를 사용하려면 송신자와 수신자가 대칭키를 사전에 공유해야 함
→ 공유해야 할 곳이 많아지면 관리해야 할 키 수 증가
- 예시) 1000명의 사원들이 서로 비밀 통신을 하려면, 키는?
→ 1인당 999개의 키가 필요
→ 회사 전체에서 필요한 키의 수 1000 x 999 / 2 = 499,500
→ 대칭 키를 보내지 않으면 수신자는 복호화 할 수 없음
→ 안전하게 키를 보내는 방법은?
- 해결 방법
→ 키의 사전 공유에 의한 해결
→ 키 배포 센터에 의한 해결
→ Diffie-Hellman 키 교환
→ 공개 키 암호에 의한 해결
디피-헬만(Diffie-Hellman) 키 교환 알고리즘
- DH는 두 대의 컴퓨터가 동일한 공유 키를 생성할 수 있는 비대칭 수학적 알고리즘임
→ 암호 통신을 하는 두 사람은 먼저 “특정 정보”를 서로 교환
- 공개되어도 무방
→ 두 사람은 교환한 정보를 가지고 각자 “동일한 키”를 생성
- 도청자는 공개된 특정 정보만으로 동일한 키 생성이 어려움
- 새 공유 키는 발신자와 수신자 간에 실제로 교환되지 않음
→ 이 키는 암호화 알고리즘에 의해 두 시스템 간의 트래픽을 암호화에 사용
→ 예) IPsec VPN을 사용하여 데이터를 교환하는 경우, SSH 데이터 교환
→ DH의 안전성은 이산대수 (discrete log) 문제 기반
- 𝑦 = 𝑔 𝑥 𝑚𝑜𝑑 𝑝가 있을 때,
→ 𝑔, 𝑥, 𝑝가 주어진다면, 𝑦를 계산하는 것은 쉬움
→ 𝑦, 𝑔, 𝑝가 주어진다면, 𝑥를 계산하는 것은 매우 어려움
→ DH 알고리즘의 비유
- 공통 색상, 약속 색상: 공개키
- 비밀 색상: 개인키
- 공개키 + 개인키 → 비밀키
디지털 서명(Digital Signatures)
- 디지털 서명은 인증, 무결성, 부인 방지 기능을 제공하는 데 사용되는 수학적 기법임
- 디지털 서명은 비대칭 암호기술과 해시함수를 사용함
- 디지털 서명은 일반적으로 다음 두 가지 상황에서 사용됨
→ 코드 서명(Code singing)
- 코드 서명은 공급업체 웹사이트에서 다운로드한 실행 파일의 무결성을 확인하는 데 사용됨
- 서명된 디지털 인증서를 사용하여 파일의 소스인 사이트의 신원을 인증하고 확인함
→ 디지털 인증서(Digital certificates)
- 공급업체 웹사이트와 시스템의 신원을 인증하고 기밀 데이터를 교환하기 위한 암호화된 연결을 설정하는 데 사용됨
- 예) 디지털 서명 알고리즘(DSA) 리베스트-샤미르 아델만 알고리즘(RSA) 타원 곡선 디지털 서명 알고리즘(ECDSA)
디지털 서명(Digital Signatures) – 코드 서명
- 디지털 서명은 주로 소프트웨어 코드의 진위 여부와 무결성을 보장하는 데 사용됨
→ 메시지를 디지털 서명한 디지털 봉투로 포장함
- 예) 메시지의 해시 값을 개인키로 암호화하고, 메시지와 함께 비밀키로 암호화
→ 최종 사용자가 소프트웨어를 설치하기 전에 서명을 확인할 수 있음
- 디지털 서명 코드는 코드에 대한 몇 가지 보증을 제공함
→ 코드가 진본이며 실제로 게시자가 제공한 것임
- 게시자의 디지털 서명 확인 → 인증
→ 소프트웨어 게시 후 코드가 수정되지 않았음
- 게시자의 디지털 서명 확인 → 무결성
→ 게시자가 명백하게 코드를 게시했다. 즉, 게시 행위를 부인하지 않음
- 게시자의 디지털 서명 → 부인방지
- 디지털 서명의 목적은 소프트웨어가 변조되지 않았으며, 원본을 신뢰할 수 있는 출처에서 비롯되었음을 보장하기 위한 것임 (인증, 무결성, 부인방지)
디지털 서명(Digital Signatures) – 디지털 인증서
- 디지털 인증서를 사용하면 사용자, 호스트 및 조직이 인터넷을 통해 안전하게 정보를 교환 할 수 있음
→ 디지털 인증서는 실제 인증서와 유사함
- 디지털 인증서는 독립적으로 신원을 확인함
- 인증서는 신원을 확인하고 서명은 신원으로부터 오는 정보를 확인함
→ 디지털 인증서는 메시지를 보내는 사용자가 본인이 맞는지 인증하고 확인하는 데 사용됨
- 송신자의 디지털 서명으로 확인
→ 디지털 인증서는 수신자에게 회신을 암호화하는 수단으로 기밀성을 제공하는 데에도 사용할 수 있음
- 수신자의 공개키를 신뢰
- 수신자의 공개키로 암호화하여, 수신자만 개인키로 복호화
- 디지털 인증서 시나리오 예시
→ 밥은 앨리스가 밥의 웹사이트에서 주문한 주문을 확인한다.
→ 밥이 주문을 확인하면 밥의 컴퓨터가 확인 해시를 생성한다.
- ① 컴퓨터는 밥의 개인 키로 해시를 암호화한다.
- ② 디지털 서명인 암호화된 해시가 문서에 추가된다.
- ③ 주문 확인서가 인터넷을 통해 앨리스에게 전송된다.
→ 앨리스가 디지털 서명을 받으면 다음 프로세스가 진행된다.
- ① 앨리스의 수신자는 디지털 서명이 포함된 주문 확인을 수락하고 밥의 공개 키를 얻는다.
- ② 앨리스의 컴퓨터는 밥의 공개 키를 사용하여 서명을 복호화하여 보내는 장치의 추정 해시값을 확인한다.
- ③ 앨리스의 컴퓨터는 서명이 없는 수신된 문서의 해시를 생성하고 이 해시를 복호화된 해시와 비교한다.
→ 해시가 일치하면 문서가 진본이다. 즉, 밥이 보낸 확인서는 서명 이후 변경되지 않았음을 의미한다.
공개키의 관리
- 두 호스트 간에 비대칭 연결을 설정할 때 호스트는 공개 키 정보를 교환함
→ 인터넷상의 신뢰할 수 있는 제3자가 디지털 인증서를 사용하여 이러한 공개 키의 진위 여부를 보장함
→ 제3자는 위조하기 어려운 자격 증명을 발급함
- 자신의 개인키로 디지털 서명
→ 제3자를 신뢰하는 모든 개인은 제3자가 발급하는 자격 증명을 수락할 수 있음
- 제3자의 공개키로 확인
- 공개 키 기반체계 (PKI)
→ 디지털 인증서를 생성, 관리, 배포, 사용, 저장 및 해지하는 데 사용되는 사양, 시스템 및 도구로 구성됨
→ PKI는 공개 암호화 키의 대규모 배포 및 식별을 지원하는 데 필요함
→ PKI 프레임워크는 확장성이 뛰어난 신뢰 관계를 촉진함
→ 예) 운전면허증과 디지털 인증서 역할 비교
- 앨리스는 운전면허증을 신청한다.
- 앨리스는 신분을 확인 받고 운전면허증을 받는다.
- 앨리스는 현금 지급을 위해 은행을 방문한다.
- 은행은 앨리스의 운전면허증으로 앨리스의 신분을 확인한다.
- 디지털 인증서는 사이버공간에서 신분증과 같은 역할을 한다.
공개키 기반체계(PKI)
- PKI의 주요 요소
→ 디지털 인증서를 생성, 관리, 저장, 배포 및 해지하는 데 필요한 하드웨어, 소프트웨어, 사람, 정책 및 절차로 구성됨
- ① PKI 인증서: 소유주의 공개키와 공개키의 유효성을 인증하는 정보를 담고 있다. (유효기간, 사용된 암호 알고리즘 등)
- ② 인증서 보관: 인증서는 개인키와 함께 개인 컴퓨터 또는 별도의 저장매체에 보관된다.
- ③ 인증 기관(CA): PKI 인증서를 발행하는 신뢰할 수 있는 제3의 기관이다. 인증서를 자신의 개인키로 디지털 서명한다.
- ④ 인증서 DB: CA가 승인한 모든 인증서들이 보관되어 있다.
- PKI의 운용 예시
→ PKI는 다음과 같이 구성요소간 상호작용을 가짐
- ① PKI 인증서 발급: 밥은 CA로부터 인증서를 발급받는다. CA는 밥을 인증하고, 밥의 인증서를 보관한다.
- ② PKI 인증서 교환: 밥은 자신의 PKI 인증서를 사용해서 앨리스와 통신한다.
- ③ PKI 인증서 확인: 앨리스는 CA의 공개키를 사용해서 밥의 PKI 인증서를 확인한다.
→ 모든 PKI 인증서를 CA에서 직접 받는 것은 아니다.
- RA(등록 기관)는 하위 CA이며 특정 용도에 대한 인증서를 발급하기 위해 Root CA의 인증을 받는다.
공개키 기반체계(PKI) 클래스 구분
- 많은 공급업체가 CA 서버를 관리형 서비스 또는 최종 사용자 제품으로 제공함
→ Microsoft Server 또는 Open SSL을 사용하여 비공개 PKI를 구현할 수도 있음
- CA는 인증서의 신뢰도를 결정하는 클래스를 기반으로 인증서를 발급함
→ 클래스 번호는 인증서를 발급할 때 소유자의 신원 확인 절차에 따라 결정됨
→ 클래스 구분
Class | Description |
0 | 테스트 용으로 사용 |
1 | 이메일 확인을 위한 개인용으로 사용 |
2 | 신원 증명이 필요한 조직용으로 사용 |
3 | 서버 및 소프트웨어 서명용으로 사용 |
4 | 기업 간 온라인 거래용으로 사용 |
5 | 개인 조직 또는 정부 조직의 보안용으로 사용 |
- 클래스 번호가 높을수록 인증서를 더 신뢰할 수 있음
공개키 기반체계(PKI) 신뢰 시스템
- PKI는 신뢰 관계에 따라 다양한 신뢰 토폴로지를 형성할 수 있음
→ 단일 루트 PKI 토폴로지(Single-Root PKI Topology)
- 가장 간단한 신뢰 토폴로지이다.
- 루트 CA는 동일한 조직 내의 최종 사용자에게 모든 인증서를 발급한다.
- 더 큰 네트워크에서는 두 개의 기본 아키텍처를 사용하여 PKI CA를 연결할 수 있다.
→ 상호 인증된 CA 토폴로지(Cross-certified CA Topology)
- 개별 CA가 CA 인증서를 교차 인증하여 다른 CA와 신뢰 관계를 설정한다.
→ 계층적 CA 토폴로지(Hierarchical CA Topology)
- 루트 CA(최상위 CA)는 최종 사용자 및 하위 CA에 인증서를 발급할 수 있다.
공개키 기반체계(PKI) 상호운용성
- IETF X.509 프레임워크
→ 많은 CA 공급업체가 제공하는 PKI 및 지원 서비스 간 상호운용성 보장이 필요함
→ IETF는 X.509 공개 키 인프라 인증서 정책 및 인증 관행 프레임워크(RFC 2527)를 발표함
- Public Key Infrastructure Certificate Policy and Certification Practices Framework
- X.509 v3 표준은 디지털 인증서의 형식을 정의함
→ X.509v3 응용체계 예시
- SSL, TLS
→ 웹 사이트 인증, HTTPS 구현에 사용된다.
- IPsec
→ IPsec VPN의 공개키 분배에 사용된다.
- S/MIME
→ 메일 내용의 암호화에 사용된다.
- EAP-TLS
→ 장치의 LAN 포트 접속을 통제하는 801.1X 프레임워크 인증에 사용된다.
5. 암호기술의 활용
암호기술의 활용
- 다음은 암호기술의 일반적인 용도
→ SSL/TLS 인증서 기반 피어 인증
→ IPsec VPN을 사용한 네트워크 트래픽 보안
→ HTTPS 웹 트래픽
→ 802.1x 인증을 사용하여 네트워크에 대한 액세스 제어
→ S/MIME 프로토콜을 사용한 이메일 보안
→ 인스턴트 메시징 보안
→ 코드 서명을 사용하여 애플리케이션 승인 및 권한 부여
→ 암호화 파일 시스템(EFS)으로 사용자 데이터 보호
→ 스마트 카드로 2단계 인증 구현
→ USB 저장 장치 보안
SSL/TLS
- 통신 내용을 암호화해 주는 프로토콜
→ SSL: Secure Socket Layer, TLS: Transport Layer Security
→ 프로토콜의 이중 구조
- 예) SSL/TLS 상에 HTTP를 올린 후 HTTP의 통신 암호화 (https://)
- SMTP(Simple Mail Transfer Protocol): 메일 전송
- POP3(Post Office Protocol): 메일 수신
- SSL (Secure Socket Layer)
→ 1994년 Netscape사가 제작
- 웹 브라우저 Netscape Navigator에 내장
→ 1995년, SSL 3.0
- TLS (Transport Layer Security)
→ 1999년, TLS 1.0 (RFC 2246)
- SSL 3.0을 기초로 해서 IETF가 만든 프로토콜
→ 2006년, TLS 1.1 (REC 4346)
- 대칭암호 알고리즘으로서 AES 추가
→ 2008, TLS 1.2 (RFC 5246)
- Heartbleed (CVE-2014-0160), POODLE (CVE-2014-8730)
→ 2018, TLS 1.3 (RFC 8446)
- 핸드세이크 개선, Cipher Suite 개선, 타원곡선 알고리즘을 기본으로 지원
- DH를 키 교환 방식으로 사용 (RSA 미사용)
TLS 1.2와 TLS 1.3 비교
- TLS 발전
→ TLS 1.0 RFC 2246 (1999.1 – 2018.6)
→ TLS 1.1 RFC 4346 (2006.4 – 2018.6)
→ TLS 1.2 RFC 5246 (2008.8 – 미정)
→ TLS 1.3 RFC 8846 (2018.3)
- TLS 1.3의 개선 사항
→ 핸드셰이크에 ‘0-RTT’ 모드 추가
→ 정적인 묶음 방식의 암호화 스위트(Cipher Suite) 개선
→ 핸드셰이크를 가능한 최대한 암호화
→ 타원 곡선 알고리즘을 기본으로 지원
→ 교환과 암호화 방식을 묶음 방식이 아니라, 개별적으로 결정
TLS Cipher Suite
- TLS 1.2의 Cipher Suite 방식
→ 키 교환, HMAC 알고리즘, 암호화 알고리즘 등 새로운 조합법이 나올 때마다 업데이트 필요
- TLS 1.3의 Cipher Suite 방식
→ 암호화 스위트의 각 부분을 나눠서 각각 합의
- 암호화 알고리즘
- 키 교환 방법 (ECDHE, DH만 지원)
- 인증서 서명 알고리즘
암호화 및 보안 모니터링
- 암호화된 네트워크 트랜잭션
→ 공격자는 SSL/TLS를 사용하여 암호화된 네트워크 트랜잭션을 악용할 수 있다.
- 예) 네트워크에 규정 준수 위반, 바이러스, 멀웨어, 데이터 손실 및 침입 시도
- 보안 경고와 관련된 PKI 관련 문제는 다음과 같다.
→ 유효 날짜 범위
- X.509v3 인증서는 "이전" 및 "이후" 날짜를 지정한다.
- 현재 날짜가 이 범위를 벗어나면 웹 브라우저에 메시지가 표시된다.
→ 서명 유효성 검사 오류
- 브라우저에서 인증서의 서명을 유효성 검사할 수 없는 경우, 인증서의 공개 키가 진짜인지 확인할 수 없다.
→ SSL/TLS 관련 문제는 웹 서버의 인증서 유효성 검사와 관련이 있다.
- 이러한 문제가 발생하면 웹 브라우저에 보안 경고가 표시된다.
- 암호화는 역동적이고 항상 변화한다.
→ 보안 분석가는 암호화 알고리즘과 작동을 잘 이해하고 있어야 한다.
- 암호화가 보안 조사에 미치는 영향
→ 첫째, 공격은 암호화 알고리즘 자체를 구체적으로 표적으로 삼을 수 있다.
- 알고리즘이 크랙되고 공격자가 키를 획득한 후에는 캡처한 모든 암호화된 데이터를 공격자가 해독하여 읽을 수 있으므로 개인 데이터가 노출될 수 있다.
→ 둘째, 데이터를 암호화하여 눈에 잘 띄지 않게 숨길 수 있기 때문에 보안 조사에도 영향을 미친다.
- 패킷이 암호화되면 네트워크 모니터링이 더욱 어려워진다.
→ 예) HTTPS는 TLS/SSL을 통해 종단간 암호화된 HTTP 트래픽을 도입하므로, 트래픽 모니터링이 쉽지 않다.
- 보안 분석가는 이러한 문제를 우회하고 해결하는 방법을 알고 있어야 한다.
→ SSL 트래픽과 비 SSL 트래픽, HTTPS 트래픽과 비-HTTPS SSL 트래픽을 구분하는 규칙을 구성한다.
→ SSL 트래픽을 복호화하여 IPS 어플라이언스로 전송하여 일반적으로 SSL에 숨겨져 있는 위험을 식별한다.
하이브리드 암호기술
- 대칭키 암호기술 → 데이터 암호화
- 비대칭키 암호기술 → 비밀키 암호화
'화이트햇 스쿨 2기 > 이론교육' 카테고리의 다른 글
공통 - 정보보안 윤리 (5) | 2024.09.18 |
---|---|
공통 - 네트워크 기초 (1) | 2024.09.18 |
공통 - 운영체제 기초 (15) | 2024.09.17 |
공통 - 컴퓨터 구조 I (1) | 2024.08.04 |
공통 - 프로그래밍 기초(C) (0) | 2024.08.04 |