Confidentiality
- 오직 송신자와 의도된 수신자만 메시지의 내용을 이해할수 있어야 한다.
- 송신자가 암호화, 수신자가 복호화
Authentication
- 송신자와 수신자가 서로의 신원을 확인하길 원한다.
Message integrity
- 송신자와 수신자는 메시지가 중간에 바뀌질 않기를 원한다.
Access and Availability
예시
- Bob과 Alice는 안전하게 소통하길 원하고, Trudy는 메시지를 가로채거나/삭제하거나/추가하고 싶어함
나쁜 행동
- 메시지 가로채기 : eavesdrop
- 메시지 추가하기 : insert
- 패킷의 송신 주소 날조하기 : impersonate
- 연결 가로채기 : hijaking
- 송신자나 수신자를 없애고 그 자리에 자신이 들어감
- 연결 끊기 : denial of service
DRDOS
- 해커가 출발지 IP를 공격 대상의 IP로 위조(스푸핑)한 뒤, 정상적인 서비스를 하고 있는 서버에 요청을 보내 되돌아 오는 응답을 공격 대상이 받게 하는 공격
암호학
Terminology
- 메시지 m 이 Ka 암호화 키에 의해 암호화 되고 Kb 복호화 키에 의해 다시 복호화된다.
공격 방법
cipher text only attack
known-plaintext attack
chosen-plaintext attack
Symmetric key cipher
Substitution crypto
Monoalphabetic cipher
- 하나의 문자를 다른 하나의 문자로 치환한다.
- 암호화 키는 26개의 문자를 26개로 치환한 매핑이다.
n Substitution cipher
- n개의 치환 매핑을 가지고 순환하여 사용한다.
- n개의 매핑과 사용되는 패턴이 암호화 키가 된다.
Block Cipher
DES - Data Encryption Standard
- 56비트 대칭키와 64비트 평문을 사용한다.
- 보내는 데이터가 길다면 64비트 로 끊고, 56비트 의 symmetric key로 연산을 취해서 전송
- 여러 라운드를 거쳐 결과가 나온다.
3DES
AES - Advanced Encryption Standard
- 128비트 블록으로 데이터를 프로세싱
- 128/192/256 비트의 키를 사용한다.
- key와 data의 크기가 DES보다 커서 더욱 안전하다.
Public key crypto
(+) >> Public key , (-) >> Private key
- 송신자와 수신자가 비밀키를 나누지 않는다.
- 공개 암호키는 모두가 알고있다.
- 수신자만 비밀 복호화 키를 알고 있다.
- 수신자가 이를 이용해 평문으로 복호화를 한다.
- 대표적인 예로 RSA가 있다.
- Rivest Shamir Adelson algorithm
요구사항
- 공개키 : 암호화 키 / 비밀키 : 복호화 키
- 공개키로 암호화 후 비밀키로 복호화가 가능하다.
- 비밀키로 암호화 하고 공개키로 복호화 할수도 있다!!
- 공개키와 비밀키를 필요로 한다.
- 공개키를 통해 비밀키를 알아낼수 있어선 안된다.
modular
RSA 암호화 사용하기
1. 준비
- 메시지 : 단순 비트 패턴
- 비트 패턴은 정수로 표현될수 있다.
- 메시지를 암호화 하는것은 숫자를 암호화 하는것과 동일하다.
2. 공개/암호 키 생성하기
- 2개의 커다란 소수 p,q를 고른다.
- 각각 n bit ( Ex. 1024bit ) 길이
- 아래 두 숫자를 계산한다.
- n=pq
- z=(p−1)(q−1)
- z와 서로소인 n보다 작은 e를 고른다.
- ed-1이 z에 의해 나누어지는 d를 고른다.
- (n, e) 가 공개키이며 (n, d)가 비밀키이다.
3. 암호화와 복호화
- 아래 공식을 사용한다.
- c=memodn 을 통해 암호화를 한다.
- m=cdmodn 을 통해 복호화를 한다.
RSA가 작동하는 이유
암호화 예시
- 비밀키로 암호화 후 공개키로 복호화 하나 공개키로 암호화 후 비밀키로 복호화하나 결과는 동일하다!
RSA가 안전한 이유
- p와 q를 모르는 상태에서 n의 약수인 p와 q를 찾아야 한다!
- 근데 큰 수의 약수를 찾는것은 상당히 어렵다.
세션 키
- 퍼블릭 키를 대칭 세션키의 전달을 위해 사용한다, 이후 대칭인 두번째 세션 키를 이용해 데이터 암호화에 사용한다.
- 즉, 세션 키를 서로 교환하기 위해 RSA를 사용하는것
- RSA가 보안상 좋긴 하나 성능이 매우 떨어지는것을 보완한다.
- RSA의 지수 계산은 상당히 성능이 떨어진다.
- DES가 최소 RSA보다 100배 이상 빠르다.
- 짧은 메시지에만 RSA를 적용하는것이다.
Authentication
- 앨리스가 밥에게 자기 자신의 신원을 증명하고 싶을때
방법 1
- 자신의 이름을 알려준다.
- 그냥 다른사람이 말하는거랑 구분이 안된다.
방법 2
- 자신의 이름과 IP주소를 같이 보낸다.
- 아무나 IP주소를 도용해 비슷하게 보낼수 있다.
방법 3
- 자신의 IP와 비밀번호를 같이 실어 보낸다.
- 전체 패킷을 감청해 나중에 다시 사용할수도 있다.
- playback attack
- 암호를 암호화해도 여전히 가능하다.
방법 4
- 감청 후 녹화된 패킷을 보내는것을 방지하는 방법
nonce : 한번만 사용되는 숫자 R
- Number used ONCE in a lifetime
- 앨리스임을 밥이 확인하기 위해 앨리스에게 숫자 R을 보내면, 이를 앨리스가 공유된 비밀키로 암호화해 다시 보낸다.
- 여기서 공유된 비밀키 : RSA로 전송된 대칭키
- 밥이 올바르게 암호화 된것을 확인시 앨리스임을 알수 있다.
- Playback attack으로부터 안전하다.
방법 5
- 밥이 R을 보낸다.
- 앨리스가 자신의 비밀키로 R을 암호화 해 보낸다.
- 밥이 앨리스에게 공개키 요청 후 R을 복호화 해보고 R을 확인한다.
여전히 존재하는 문제점 : Man in the middle attack
- Alice에겐 Bob인척, Bob에겐 Alice인척 한다.
- Alice와 Bob 사이에서 Trudy가 서로 메시지를 전달할수 있다.
이를 해결하기 위해 공개키가 정말 송신자의 것인지 믿을 장치가 필요하다.
Digital signature
- 밥은 자신만이 사용하는 비밀키가 있다.
- 앨리스는 그 비밀키로 암호화된 메시지와 원본을 받는다.
- 그 메시지를 밥의 공개키로 복호화 했을때 이게 동일한 메시지일시, 밥이 이 메시지를 보냈다는것을 확인할수 있다.
- 즉, 받는이가 보낸이의 정체를 확인할수 있는 방법.
Message Digest
- 긴 메시지를 공개키 암호화 하긴 너무 크다 > 고정 길이의 계산 쉬운 지문을 이용한다.
- 메시지에 해시함수를 적용해 고정 크기의 Message Digest H(m) 을 구한다.
- 메시지를 보낼때 이 digest를 비밀키로 암호화 하여 첨부한다.
- 받은쪽에서는 모든 메시지를 확인할 필요 없이, 받은 메시지에 해시함수를 돌려 만든 H(m)과 공개키로 복호화한 H(m)을 비교하면 된다.
해시 함수
- MD5
- 4단계에 걸쳐 128비트의 Message digest 생성
- 보안이 좋지 않다.
- SHA-1
- 160비트의 Message digest를 생성한다.
검증된 공개키의 필요성
- 누군가 공개키를 사칭해 다른사람의 공개키인것처럼 위장 후 자신의 비밀키로 암호화 해 다른사람이 암호화 한것처럼 위장할수 있다.
Public key Certification Authorities ( CA )
- Entity ( 사람 / 웹사이트 / 라우터 ) 를 위한 퍼블릭 키를 연결해주는 CA
- Entity가 공개키를 등록하면 CA가 신원의 증명을 제공해준다.
- CA는 주어진 정보를 자신의 비밀키를 통해 암호화 한다.
- 다른사람의 공개키를 알고 싶을땐, 주어진 Digital signature를 CA의 공개키로 복호화 하면 알수 있다.
예시 : 이메일 암호화 - 시험
- 랜덤 대칭키를 생성후, 대칭키는 공개키로 암호화 하고 메시지는 대칭키로 암호화 해 같이 보낸다.
- 받은쪽에서 먼저 대칭키를 비밀키를 통해 복호화 한 후 얻은 대칭키를 통해 메시지를 복호화 한다.
- Confidential!
- 이 과정에서 메시지를 해시함수를 거친 값을 비밀키로 암호화 한 뒤 다시 보낸다
- 받은 쪽에서는 받은 메시지를 해시함수를 돌려본 값과 공개키로 복호화한 해시값을 비교해 Integrity의 확인이 가능하다.
- Authentication 또한 이 과정을 통해 확인 가능하다.
TLS : Transport Layer Security
- Transport layer에서 널리 사용되는 보안 프로토콜
제공하는 요소
- confidentiality
- integrity
- authentication
과정
- Handshake
- 앨리스와 밥이 자신의 Certificate과 Private key를 통해 서로를 검증한다.
- 서로의 공유 Secret key를 생성 혹은 교환한다.
- 디피 헬만 방법
- DH 알고리즘의 핵심은 상대방의 공개키와 나의 개인키를 이용하여 계산을 하면 비밀키가 나온다는 것이다.
- Key derivation
- 다양한 키를 shared secret에서 도출한다.
- 데이터를 보낼때 / 해시값을 보낼때 / 데이터를 받을때 / 해시값을 받을때 각각의 key가 있다.
- Data transfer
- Connection clouser
- 특별한 메시지를 통해 안전하게 연결을 종료한다.
t-tls : Toy TLS / 간단한 TLS의 예시
t-tls : 초기 핸드셰이크
- Bob이 앨리스와 TCP 연결을 성립
- 밥이 앨리스가 진짜 앨리스인지 확인
- 밥이 앨리스에게 Master secret key를 전송한다 >> TLS 세션에서 다른 키를 생성하기 위해 사용한다.
- 전송할때 앨리스의 공개키로 암호화를 한번 시키고 보낸다.
문제점 : 데이터 받기 전에 3 RTT가 필요할수 있다.
t-tls : 암호화 키
- 하나 이상의 암호화를 위해 동일 키를 사용하는것은 좋지 못하다.
- MAC : Message Authentication Code > 해시함수 사용해 확인하는 과정을 대칭키로 진행한다.
- 이를 위해 데이터 암호화용 대칭키와 해시값 암호용 대칭키를 다른것을 사용하는것.
- Question
- Encrpytion key
- 4개의 키 사용
- K_c : 클라이언트 > 서버로 가는 데이터의 암호화
- M_c : 클라이언트 > 서버로 가는 MAC key
- K_s : 서버 > 클라이언트로 가는 데이터의 암호화
- K_c : 서버 > 클라이언트로 가는 MAC key
- 모든 Key는 Key Derivation Function (KDF) 를 통해 생성된다.
- Master secret과 몇개의 랜덤 값을 이용한다.
t-tls : 데이터 암호화하기
- TCP 패킷을 임의로 재정렬 해 새로 보내거나, 녹화후 보낼수 있다.
- 이를 해결하기 위해 sequnce number를 사용하고, nonce를 사용한다.
- TLS sequence number : MAC에 TLS-seq#를 포함한다.
t-tls : 종료하기
Truncation attack : 공격자가 임의로 TCP 연결을 종료시키는 행위
- 위 문제를 해결하기 위해 record에 종료 상태 파악을 위한 type field를 추가한다.
- 결론적으로 보내는건 길이 + 타입 + 데이터 + 데이터와 seq넘버를 해시한 MAC
- type 0 : 계속 전송중, type 1 : 전송 종료
TLS 1.3
- TLS: 1.3(2018): TLS 1.2(2008)보다 암호 모음 선택이 더 제한됨.
- 37개 선택이 아닌 5개만 선택 가능
- 키 교환에 DH 또는 RSA가 아닌 DH(Diffie-Hellman)가 필요하다.
직렬 암호화, 인증이 아닌 데이터에 대한 암호화 및 인증 알고리즘("인증된 암호화") 결합
- HMAC는 SHA(256 또는 284) 암호화 해시 함수를 사용합니다.
IP Security
- 데이터그램-레벨의 Encryption , Authentication, Integrity 제공
- Transport mode
- 페이로드만 Encrpyt / Authenticate
- Tunnel mode
- 전체 데이터그램이 Encrypt / Authenticate
- 암호화된 데이터그램이 새로운 IP 헤더로 Encapsulation 되어 목적지로 터널링됨.
방식
- Authentication Header Protocol
- source authentication 과 data integrity 는 제공한다.
- 하지만 confidentiality(암호화) 는 제공하지 않는다. => 제공하려면 Ks 를 통해 한번 더 암호화 해줘서 보내야함.
- 비교적 안전한 망에서 사용한다.
- Encapsulation Security Protocol (ESP)
- source authentication 과 data integrity, Confidentiality 를 제공한다.
Security associations ( SAs )
- 데이터를 전송하기 전에 전송에서 수신쪽으로 security association이 성립된다.
- 수신측은 SA에 대한 정보를 유지하고 있는다.
SA가 담고있는 정보
- 32비트 ID
- 출발 SA 인터페이스 ( 주소 )
- 도착 SA 인터페이스 ( 주소 )
- encryption 방법
- encryption key
- integrity check 방법
- authentication key
IPsec datagram
- SPI : Security Parameter Index, 여러개의 SA들중 하나를 구분하기 위해 사용된다.
- original datagram 이 R1에 들어오게 되면 trailer(padding + padding length + next header 정보)를 붙여준다.
- SA에 의해 결정된 알고리즘 과 키를 이용해 original datagram + trailer를 암호화(encrypt)한다.
- sequence number를 활용해(replay attack을 막기위해)(ESP header) enchilada를 생성한다.
- 생성한 enchilada 끝에 authentication MAC을 붙여 payload를 만들어준다.
- 터널링을 통해 IPv4 헤더를 붙여준다.
SPD / Security Policy Database
Policy
- 주어진 데이터그램에 대해 IPsec을 적용할지 여부를 파악
- SPD에 해당 사항이 저장되어 있다.
SAD / Security Associated Database
- 끝점이 SA를 보관해두는 곳
- IPsec 데이터그램을 보낼때 R1에서 SAD에 접근해 SA를 파악한다.
- R2에 데이터그램이 도착하면 SPI를 통해 SAD에서 SA를 찾아 프로세싱한다.
IKE
802.11 WIFI
WEP : Wired Equivalence Privacy
- 유선 연결과 비슷한 수준의 보안을 제고안다는 뜻
Association vs Authentication
- Association 은 AP와 통신을 한다는 뜻
- Authentication 은 서비스를 받을수 있도록 허용을 받는 과정
절차
- AP가 자신의 존재를 advertise한다, 이때 authentication/encrpytion 방법을 알려준다.
- 기기는 이에 자신이 가능한 authentication/encryption 방법을 알려준다.
- AS가 실질적인 Authentication 과정을 진행한다.
- 비밀번호 ( shared secret ) 과 nonce 와 hashing 등을 통해 대칭 세션키를 생성한다.
- 핸드셰이킹 과정을 거친다.
- EAP ( Extensice Authentication Protocol ) 에 위 사항이 정리되어 있다.
Cellular
4g
- SIM카드는 사용자 구분용 ID인 IMSI를 포함한다, 이는 shared key를 이미 포함하고 있다.
- MME와 HSS가 일종의 Authentication server으로서 동작한다.
4g vs 5g
4g
- visited network의 MME가 authentication 을 진행한다.
- 미리 공유한 키를 사용한다.
- IMSI가 평문으로 BS에 전송된다.
5g
- home network가 authentication 을 진행한다, visited MME는 중간자로서 거부가 가능하다.
- 미리 공유한 키가 존재하지 않는다.
- IMSI가 공개키를 통해 암호화 된다.