컴퓨터네트워크 - Network Security

SEUNGHWANLEE·2021년 6월 8일
0

Network

목록 보기
1/2
post-thumbnail

sender 역할을 Alice(Client), receiver 역할을 Bob(Server) 그리고 중간에 공격하는 역할을 Trudy라고 이번 포스팅에서 가정한다.

네트워크 보안이란 무엇인가?

아래 4가지가 보장이 되어야 네트워크 보안이라고 할 수 있다.

  • confidentiality : sender-encrypts(암호화), receiver-decrypts(암호 해독), 일종의 readability, 제 3자는 읽을 수 없어야 함
  • authentication : sender, receiver 서로 인증
  • message inegrity(무결성): 주어진 메시지가 훼손되지 않았다는 걸 확인하는 것
  • access and availability : 항상 접근가능해야한다는 점

네트워크에서 공격받는 경우 - Trudy

  • eavesdrop : 도청하는 경우
  • impersonation : source address를 변경해서 정보를 도용하는 경우
  • hijacking : sender, receiver 중 하나를 배제시키고 본인이 차지하는 것
  • denial of service : 서비스를 하지 못하게 막는 것

Crypotography 원리


encryption 할 때나 decryption 할 때는 key가 필요합니다.

encryption scheme

주어진 정보가 어느 정도 있느냐에 따라서 정의할 수 있다.

  • cipher-text only attack:
    주어진 단서가 cipher-text만 있는 경우
    1. brute force : exhaustive search, 시간복잡도가 굉장히 높다.
    2. statistical analysis : 통계치를 사용하는 방법
  • know-plaintext attack:
    약간의 단서, cipher-text와 plain-text를 알고 있는 경우
  • chosen-plaintext attack:
    plain-text에 해당되는 cipher-text를 알아낼 수 있는, key는 알 수 없고 encryption 된 결과를 알 수 있는 경우

대칭형(symmetric) key cryptography

대칭형(symemetric key crypto)는 암호화 및 복호화 과정에서 같은 키 값이 사용된다.

  • 장점: 속도가 빠르다.
  • 단점: 키 분배가 어렵다.
    결국 키 분배를 위해서 public key를 사용하게 된다.

Simple encryption scheme

  • substitution cipher: 또 다른 것으로 교체하는 방식
    ex) monoalphabetic cipher: 다른 문자로 한 문자를 바꾸는 것
    대칭되는 문자로 해석하는 된다.

  • cycling pattern + n substitution ciphers: 패턴을 순환하면서 n개의 cipher를 사용하는 방식
    ex) n=4: M1,M3,M4,M2,M3,M2M_1, M_3, M_4, M_2, M_3, M_2;
    dog는 d - M1M_1, o - M3M_3, g - M4M_4로 해독된다.

Block Cipher

bit pattern으로 생각하는 방식

임의로 K-bit의 block cipher 인 경우에는 패턴의 갯수가 2K!2^K!이다.

  • input value table : 2K2^K

K가 커지면 기하급수적으로 table 사이즈가 커지기 때문에, 예를 들어서 64-bit 가 입력되는 값이라면 이를 8-bit 씩 나누어서 작업하게 된다.

Symmetric key crypto: DES

Block Cipher를 사용한 실제 사례

DES: Data Encrytion Standard

  • key size: 56-bit, 대칭형 키
  • input: 64-bit, plain-text
  • 3번 모두 다르게 3개의 키를 사용해 암호화하는 방식도 존재

AES:Advanced Encryption Standard

  • key size: 128, 192, 256 bit
  • inputL 128-bit

Cipher-Block Chaining

같은 input(plain-text)이 항상 다른 output(cipher-text)이 나올 수 있도로 해주는 방법

Block cipher는 plaintext가 같으면 항상 같은 ciphertext가 생성되는 문제가 있다.

  • ex) 명세서같은 것을 Block cipher를 통해 암호화를 한 경우
    안에 내용은 알 수 없지만, 양식을 알고 있어서 내용을 뒤바꾸는 경우 replacement attack이 가능하다.
  • 위치 마다 랜덤 숫자를 각각 생성한 후, XOR연산을 사용해서 암호화를 하면 모두 다른 값이 나오게 된다.
  • 매번 랜덤 숫자를 생성하게 되면 대역폭이 낭비된다.
  • 연쇄적으로 XOR 연산을 하기 때문에, C1C_1C2C_2의 자리를 바꾸게 되는 경우 다른 cipher-text값이 나오게 된다.
  • IV : initial vector, 수신자에게 알려줘야 한다.

public(비대칭형)(asymmetric) key cryptography

암호화 키와 복호화 키가 다르다.

RSA 알고리즘

  • KB(KB+(m))=mK_B^-(K_B^+(m)) = m
  • private key를 찾아낼 수 없어야한다.

RSA 알고리즘: modular arithmetic

  • x mod n : x를 n으로 나눈 나머지 연산
  • 다음과 같은 법칙이 성립
    [(a mod n) + (b mod n)] mod n = (a+b) mod n
    [(a mod n) - (b mod n)] mod n = (a-b) mod n
    [(a mod n) * (b mod n)] mod n = (a*b) mod n
  • (a mod n)d mod n=ad mod n{(a\ mod\ n)^d}\ mod \ n = {a^d\ mod\ n}

RSA 알고리즘: getting ready

  • msg: bit pattern
  • 정수를 비트로 표현하는데 이는 같은 값을 암호화하는 의미

RSA 알고리즘: public/private key pair 생성

  1. 두개 임의의 소수(p,q)(p,q)를 선택한다. (1024 비트 이상의 수)
  2. n=pq,z=(p1)(q1)n = pq, z = (p-1)(q-1)
  3. nn 보다 작은 수 중에서 zz와 같이 나누어 떨어지는 수가 1밖에 되지 않는 수, ee를 고른다. (z와 e의 최대공약수는 1, relatively prime)
  4. ed1ed - 1zz로 나누어떨어지는 dd를 고른다. (ed % z = 1)
  5. public key: (n,e)(n, e), private key: (n,d)(n, d)

RSA 알고리즘: 암호화(encryption), 복호화(decryption)

  • 암호화(encryption)
    c=me mod nc={m^e}\ mod\ n
  • 복호화(decryption)
    m=cd mod nm = {c^d}\ mod\ n

m=(me mod nd mod n)m = ({{m^e}\ mod\ n}^d\ mod\ n)

RSA 알고리즘: 예제

RSA 알고리즘: 왜 동작하는지?

cipher-text에 modular n을 하게 되면 m이 나온다.


m이 n보다 작다고 하게 되면 m이 나온다.

RSA 알고리즘: 또 다른 중요한 특성

암호화 식(encryption)복호화 식(decryption)이 같기 때문에 순서와 상관없이 디지털 서명(digital signature)을 만들 수 있다.

RSA 알고리즘: 보안성이 있는가?

public key인 (n, e)를 알고 있어도 private key인 (n, d)를 알기 위해서는 n을 알아야 하는데, n을 구성하는 p와 q가 굉장히 큰 소수이기 때문에 찾아내기 어렵다. 계산양이 많다.

RSA 알고리즘: 세션(session) 키

  • session key: 한 동안 쓰고 파기되는 키
  • public key crypto는 second key를 만들 때 사용
  • 암호화를 할때는 세션(session) 키를 이용

Message integrity(무결성) and Digital Signatures

훼손되었는지 아닌지를 알 수 있는 방법

Cryptographic Hash Functions Message digests

긴 메시지를 encrypt를 하기에는 비용이 많이 들기 때문에 축약해 효율적인 방법을 선택한다.
Hash Function의 목표는 "Fingerprint"를 만드는 것이다. 긴 메시지를 mapping 하는 역할을 한다.

Hash Function properties:

  • many-to-1
  • fingerprint(fixed-size msg digest) 생성
  • H(m)을 만들어내는 m'을 찾아내는 것이 어렵다. 오직 m만이 H(m)을 만들 수 있다.

Internet checksum: poor crypto hash function

checksum을 계산할 때 hash function을 사용할 수 있지만, 어떤 메시지가 해쉬 값과 함께 주어진다면, 같은 해쉬 값을 갖는 또 다른 메시지를 찾을 수 있다는 것이 문제가 될 수 있다.


이런 hash function은 사용할 수 없다.

Hash function algorithms

  • MD5: 128-bit msg digest 계산, 똑같은 hash 값을 주는 값을 찾기에는 어렵다.
  • SHA-1: 160-bit msg digest

msg의 길이가 클 수록 찾을 확률이 낮아집니다.

Digital Signatures

hand-written signature와 비슷하다

Hash Function 만으로는 해결되지않는 암호화를 Digital Signature를 통해 개선할 수 있다. 전자 문서, 디지털화된 그림과 같은 곳에 owner/creator와 같은 표시를 할 수 있다. 이로써 verifiable, nonforgeable 한 특성을 가져, 문서가 위조 되지 않았다는 것을 알 수 있어야한다.

Message Authentication Code(MAC) - private key (-)

shared key를 이용한 encryption algorithm
임의의 msg을 hash function에 집어넣어 digital signature(H(m+s)H(m+s))를 만들어 송신 후, 수신자도 마찬가지로 shared key로 받은 메시지를 확인해봤을 때 shared key를 가진 사람이 전송한 건지 확인할 수 있다.

Digital signature - public key (+)

임의의 어떤 메시지에 자신의 private key를 이용해 암호화(encryption)를 하고 수신자는 public key를 가진 대상이 이를 이용해 확인을 해보고 올바른 송신자로 부터 전송된 건지 알 수 있다.

ex) Alice(receiver), Bob(sender)

  • Alice는 msg m을 signature mm, KB(m)K_B^-(m)을 받았다.
  • Alice는 msg m을 Bob의 public key(KB+K_B^+)를 이용해 수신받은 KB(m)K_B^-(m)를 확인한다. 이를 수식으로 나타내면 KB+(KB(m))=mK_B^+(K_B^-(m)) = m이다.
  • 만약에 KB+(KB(m))=mK_B^+(K_B(m)) = m이 성립한다면 Bob의 private key를 이용해 보낸 것이 틀림없다.

Alice는 Bob이 m에 sign을 했고 그 누구도 Bob이외에는 sign하지 않았다는 것을 알 수 있다.
non-repudiation : Bob은 sign을 안했다고 발뺌을 할 수 없다는 것

sender digital sign : Alice 작업

  1. large msg m을 hash function을 통해 H(m)H(m)을 만든다.
  2. public key(KB+K_B^+)를 이용해서 encrypt 한다.
  3. encrypted msg digest(KB(H(m))K_B^-(H(m)))을 msg m에 붙여서 보내게 된다.

receiver digital sign : Bob 작업

digital signature를 이용해서 data integrityauthentication을 할 수 있다.

  1. large msg m을 hash function을 통해 fingerprint, H(m)H(m)을 만든다.
  2. 수신한 KB+(H(m))K_B^+(H(m))을 private key(K_B^-)를 이용해서 decrypt를 하여 fingerprint, H(m)H(m)를 만든다.
  3. 앞서 만든 두개의 fingerprint를 만들어서 비교를 해준다.
    3.1. 같지 않으면 위조가 됐거나 Bob이 보내지 않은 경우

Public-key certification

Bob의 key인지, Trudy의 key인지 알 수 없는 경우, shared secret를 중간에 Trudy가 기록(record)할 수 있기 때문에 이런 점에서 MAC을 사용하는 방식은 충분하지 않다.

Certification authorities

  • certification authority(CA): 은행이나 정부 기관에서 발행을 해주는 것, 인증 및 발행을 해주는 기관
  1. E(person, router) 가 CA에 public key와 함께 등록 신청을 한다.
  2. CA는 E의 public key(KE+K^+_E)를 CA의 private key(KCAK^-_{CA})를 이용해서 암호화(encrypt)
  3. certificate 생성

위조된 certificate인지 아닌지는 CA의 private key로 decrypt를 해서 알아 볼 수 있다.

End-point Authentication

  • Protocol ap1.0 : 본인이 본인이라고 말하는 것
  • Protocol ap2.0 : source IP address에 본인 인증을 하는 경우
  • Protocol ap3.0 : password를 보내는 경우
    도용자(Trudy)가 sender의 패킷을 기록해 도용할 수 있음(playback)
  • Protocol ap3.1 : password를 encrypted 해서 보내는 경우
    중간에서 record 및 playback 그대로 작용
  • Protocol ap4.0 : 문제를 내서 해결할 수 있는지 없는지 확인하는 경우
    문제 : nonce, number(R), 큰 랜덤 수
    해결 : sender와 receiver가 갖고 있는 shared key를 encrypt해서 보낸다. TCP에서의 SYN(synchronized sequence number)와 같은 역할(?)

Authentication: ap5.0

public key를 이용해서 확인하는 방법

ap5.0: security hole

"public certificate가 요구되었다면 이런 문제를 방지할 수 있다."

man in the middle attack : 중간에 Trudy(공격자)가 있을 경우에 문제가 될 수 있다.
Trudy가 sender인 척, receiver인 척 행동할 수 있는데, 이때 public key를 요구하기 때문에 공격이 가능하다. certificate가 없기 때문에 도용을 추적하기 어렵다.
sender와 receiver는 정상적으로 모든 정보가 공유가 되었기 때문에 오류를 알 수 없지만 이 와중에 모든 정보가 누출 되었다는 점이 문제이다.

Secure e-mail

application layer에서의 보안

  1. confidential e-mail를 전송하는 경우

    최종적으로 읽을 때 KsK_s가 있어야 하기 때문에 Bob의 private key가 없다면 KsK_s를 decrypt할 수 없다.

🔥 public key로 encrypt할 때 RSA 알고리즘을 이용해서 주어진 그림의 함수들을 구체적인 수식으로 표현해보세요.
: moduler operation으로 표현할 수 있습니다.

  1. authenticationmessage integrity

    m은 plain-text이므로 누구나 볼 수는 있지만 훼손할 수는 없다. 위에서 설명한 receiver digital signature 방식과 동일하다.

  2. secrecy, authentication, integrity 모두 보장

    1. digital signature 생성
    2. 세션 키(session key) encryption
    3. 세션 키(session key)를 Bob의 public key로 encrypt

Securing TCP connections: SSL

https 처럼 's'가 붙는 경우 SSL이 사용된다는 점을 알 수 있다.

  • TLS(Transport Layer Secuirty): SSLv3
  • 제공기능
    • confidentiality
    • integrity
    • authentication

SSL, TCP/IP


SSL은 application에게 API를 제공하는 형태, Transport protocol로 간주된다.

PGP 처럼 작동할 수 있다는 점


위에서 secrecy, authentication, integrity 모두 보장 하는 방법과 같은 방식으로 보내게 되면 문제가 있다.

SSL에서는 interative data와 byte stream을 같이 보내게 된다. connection이 꽤 오랫동안 지속되기 때문에 다양한 secret key가 필요하다. 그리고 SSL에서는 public key certificate를 어떻게 교환할 지 제안을 하고 있는데, handshake phase에서 주고 받는다.

Toy SSL: simple secure channel

  1. handshake : certificate를 주고 받고 authenticate를 각자 하며 shared secret(matser key)를 공유

  2. key derivation: 다양한 키를 shared secret에서 도출
    auth, encrypt를 하나의 키로 사용하는 것은 좋지 않다. MAC(message authentication code : H(m+s)H(m+s))과 encryption할 때도 키가 필요하다.

    4개의 key가 필요하다. 각각 client와 server에서 전송할 encryption key와 MAC key 총 4개가 생성된다. 그리고 키를 생성하는 함수는 KDF(keys derived from key derivation function)라고 한다.

  3. data transfer : 데이터가 전송

  4. connection closure : 연결 종료됐다는 것을 알려주기 위한 패킷 전송

항상 Client-Server에서는 Server가 먼저 자기 자신을 인증한다(public key certificate를 전송).

Toy SSL: data records

중간에 integrity를 계속해서 확인하기 위해서는 stream을 record 단위로 MAC을 가지고 있어야 한다.

레코드의 가장 기본적인 모습이다.

Toy SSL: sequence numbers

  1. replay or re-order
    - replay attack : 전송했던 레코드를 복사했다가 다시보내는 공격
    - re-order attack : 전송했던 순서를 바꿔서 다시보내는 공격
    해결책 :
    위 두개의 공격을 막기 위해서 sequence number가 필요하다.
    MAC = MAC(MxM_x, sequence || data)
    sequence number는 0부터 시작해 1씩 증가한다.

  2. replay all
    - replay all attack : 모든 레코드를 복사했다가 다시 보내는 경우
    해결책 :
    nonce(random number in life-time)를 사용, 키가 매번 connection마다 달라지기 때문에 방지할 수 있다.

  3. truncation
    - truncation attack : TCP connection close segment를 가짜로 만들어서 보내 공격하는 경우
    데이터를 중간하는 와중에 이렇게 공격을 한다면 데이터 교환이 중지되며 공격되는 경우
    해결책 :
    type을 선언, 0은 데이터 1은 종료
    type은 MAC으로 보호되며 MAC = MAC(MxM_x, sequence || type || data)

Toy SSL: 요약

SSL cipher suite

다양한 알고리즘에서 선택할 수 있다. 일반적으로 Client가 먼저 요청을 하고 Server가 선택을 해준다.

Real SSL: handshake

4가지의 목적

  1. server authentication
  2. negotiation, 어떤 것을 사용할 지 고르는 것
  3. establish key
  4. client authentication(optional)

순서

  1. client는 nonce와 함께 수행할 수 있는 알고리즘 리스트를 전송

  2. server가 리스트로부터 선호하는 알고리즘을 선택, 서버의 certificate 와 서버 nonce를 전송

  3. client는 서버가 보낸 certificate를 인증해 서버의 public key(Ks+K_s^+)를 추출해 random number generator를 이용해서 pre_master_secret를 생성한다. 생성한 pre_master_secret를 server의 public key를 이용해 server에게 전송

    이렇게 되면 client와 server 모두 상대방의 public key, pre_master_secret 그리고 nonce를 가지고 있게 된다.

왜 두개의 nonce가 필요할까요?🧐
connection replay attack을 방지하기 위해서 필요하다. Trudy가 모든 레코드를 도청하게 되면, Trudy가 Bob에게 다음날 똑같은 데이터를 보낼 수 있는 위험이 있다. 그래서 매번 encryption key가 달라야하는 이유이다.

  1. client와 server 각자 3개의 pre_master_secret과 nonce를 통해서 encryption 및 MAC key를 생성, 4개의 key가 만들어진다.

  2. client와 server 모두 MAC 을 전송하는데, 이는 앞서 보낸 메시지가 훼손되지 않았다는 것을 암시

    위 단계는 handshake가 훼손되는 것으로 부터 보호하기 위해서 필요한 단계이다. MAC key를 주고 받음으로써 앞서 받은 메시지가 훼손되었는지 아닌지를 알 수 있다.

Key derivation

client nonce + server nonce + pre_master_secret → random-number generator

위와 같이 master key(secret)를 만들어 낸다. 그리고 master key(secret)와 새로운 nonce를 사용해서 key block을 생성해낸다. 그래서 key block을 쪼개서 encypt key, MAC key, vector key로 만들어 낸다.

Network Layer security: IPsec

network layer(machine)와 network layer(machine)사이에서의 보안성

  • datagram의 payload(TCP, UDP segment, ICMP msg, OSPF msg ...)를 encrypt하는 것
  • 모든 데이터는 암호화된다.

blanket coverage: 두개 머신사이에 어떤 데이터가 들어왔는지 알 수 없는 것

Virtual Private Networks(VPNs)

문제: 기관에서는 private network를 원하지만 물리적으로 네트워크를 구비하기에는 비용적인 면이 문제가 된다. 라우터, 링크 DNS 구조도 모두 분배해서 구비하기에는 비용적으로 어렵다.

해결책: public internet에서 private network처럼 사용하려는 경우에는 VPN을 사용해야한다. 이는 물리적인 분리가 아니라 논리적인 분리를 의미한다.

IPsec services

SSL과 동일하다.
두개의 프로토콜로 나누어진다.

  • AH :
    authentication + data integrity 제공
  • ESP :
    authentication + data integrity + confidentiality 제공

tunneling mode : header를 붙여서 전송하는 방식

이렇게 VPN을 구성하게 된다.

Security associations (SAs)

encryption key를 적용하기 위해서는 기억한다는 것은 state가 필요하고 이는 곧 connection가 연관이 있다.

IPsec는 connection oriented이끼 때문에 데이터를 보내기 전에 connection이 이루어져야한다. 이때 연결은 단방향(simplex)로 이루어진다.

"그리고 state 정보를 클라이언트와 서버가 주고 받아야하는데 어떻게 데이터를 주고 받을 지는 표준화되있지 않고 알려져있지 않다." - 안ㅇㅇ교수님.

Security Association Database (SAD)

  • SA 매개변수
    - 보안 매개변수 색인 (SPI, Security Parameter Index)
    .. 키관리 기능은 SPI 식별을 통해서 비로소 인증,기밀성 기능과 연결됨
    - 순서번호 카운터 (Sequence Number Counter)
    - 재생공격 방지 윈도우 (Anti-replay Window)
    - AH 정보 (AH Information)
    - ESP 정보 (ESP Information)
    - 보안연관의 사용 주기 (Lifetime of this Security Association)
    - IPSec 프로토콜 모드 (IPSec Protocol Mode)
    - 경로 MTU (Path MTU)
  • 각 SA의 식별 : 3개의 식별요소에 의함 ☞ 위 2.항 참조
    - (SPI, 목적지 주소, AH/ESP)
  • 구분
    - Outbound SAD : 발신용
    - Inbound SAD : 수신용

ktworld 참조

IPsec datagram

  • 용어정리
    - ESP: Encapsulating Security Payload
    - SPI: SAD에서 인덱싱(indexing) 하기 위해서 필요한 것, state가 도착했을 때 state를 데이터베이스에서 retrieve할 수 있게 하는 정보(index), plain-text로 받아야함
    - Seq # : replay attack 방지, plain-text로 받아야함
    - trl : trailer
    - padding: block cipher를 쓰는 경우에는 ESP trl 안에 64 바이트가 모두 사용되지 않았을 경우에 그만큼 padding이 필요하다고 명시
    - enchilada : 멕시코 음식, 예명, reply attack을 막기 위해서

Example R1 to R2

  1. original datagram 이 R1에 들어오게 되면 trailer(padding + padding length + next header 정보)를 붙여준다.
  2. SA에 의해 결정된 알고리즘 과 키를 이용해 original datagram + trailer를 암호화(encrypt)한다.
  3. sequence number를 활용해(replay attack을 막기위해)(ESP header) enchilada를 생성한다.
  4. 생성한 enchilada 끝에 authentication MAC을 붙여 payload를 만들어준다.
  5. 터널링을 통해 IPv4 헤더를 붙여준다.

IPsec sequence numbers

바로 전에 보냈던 패킷을 누가 도용을 해서 바로 보내는 경우에는 이를 duplicate한지 예방하기 위해서
replay attack 방지용

ESP에서는 plain-text, SSL에서는 MAC안에 seq#를 넣어두는 차이점이 있음

Security Policy Database(SPD)

  • IPsec을 사용해야하는지 아닌지를 결정해야한다.
  • 어떤 SA에 속하는 지도 알아야한다.

SPD vs. SAD

도착하는 datagram에 대해 하는 역할의 차이

SPDSAD
whathow
SA & datagram mappingkey value

IPsec service

Trudy가 공격하려는 상황을 막으려면 어떻게 해야할까?

  • Trudy가 original content를 볼 수 있나?
    : 볼 수 없다. 암호화되어있기 때문에
  • flip bit 공격이 가능하냐
    : digital signature가 있기 때문에 MAC에서 발견이 된다. 어떤 비트가 훼손됐는지는 알 수 없지만 훼손 여부는 알 수 있다.
  • masquerade(다른 대상인척) 할 수 있는지?
    : IP source 를 변경할 수 없어서 할 수 없다.
  • replay attack을 할 수 있나?
    : seq# 를 사용하기 때문에 할 수 없다.

Summary

각 네트워크 layer별로 사용되는 네트워크 보안(algorithm/protocol)에 관해서 알아보는 시간이었다.

  • Application layer : e-mail(PGP-protocol)
  • Transport layer : TLS(SSLv3), SSL(Secret Socket layer)
  • Network layer : IPsec
profile
잡동사니 😁

0개의 댓글