이 영역을 누르면 첫 페이지로 이동
천천히 꾸준히 조용히 블로그의 첫 페이지로 이동

천천히 꾸준히 조용히

페이지 맨 위로 올라가기

천천히 꾸준히 조용히

천천히 꾸준히 조용히.. i3months 블로그

[Computer Network] Cryptography

  • 2025.12.14 18:07
  • Computer Science/Computer Network
반응형

 

 

 

네트워크 보안의 기초는 Symmetric Key Cryptography (대칭키 암호화)

 

 

 

 

항상 그렇듯 Alice와 Bob이 통신함. 동일한 키를 공유하고, 키는 Ks로 표현.

Ks(m)은 공유키로 평문을 암호화함을 의미. 동일한 Ks를 사용해 암호문을 평문으로 변환할 수 있다. 

 

서로 만나지 않은 상태에서 네트워크로 키를 주고받으면 공격자가 키를 가로챌 수 있는데. Ks 값을 어떻게 설정해야 할까? 

 

 

Data Encryption Standard

56비트 대칭키를 사용해 데이터를 64비트 크기의 블록으로 쪼개서 암호화.

Block Cipher 방식을 사용해 블록들을 서로 연결해 암호화 강도를 높이는 Cipher Block Chaning 기법을 사용한다.

 

다만.. 56비트 키는 브루트포스 때리면 너무 쉽게 풀린다.

실제로 DES로 암호화된 문구글 복호화하는건 하루도 안돼서 풀려버림; 

 

DES가 너무 약하니까 서로 다른 3개의 키를 사용해서 3번 암호화하는 방식인 3DES를 사용했는데, 역시 근본적인 해결책은 아니다. 

 

 

Advanced Encryption Standard

DES의 취약점을 극복하고 현재 표준으로 사용되고 있음.

128비트 블록 단위로 데이터를 처리하고, 대칭키를 만들 때는 128비트, 192비트, 256비트 중 선택할 수 있다.

 

DES를 1초만에 푼다고 했을 때,  AES는 149조 year 가 걸림; 사실상 해결이 불가능하다. (양자컴으로는 될수도 있음)

 

와이파이 비번, 폰뱅킹 등 현대 보안 시스템의 근간으로 사용되고 있다. 

 

 

 

 


 

 

 

 

다시 Ks 값을 설정하는 문제로 돌아와서.. 공개키 암호화를 사용하면 Ks 값을 안전하게 설정할 수 있다. 

 

Public Key Cryptography

대칭키와 달리 서로 다른 두 개의 키를 사용한다.

 

Public Key - 모두에게 공개하는 키.

Private Key - 소유자만 보관하는 키.

 

공개키로 암호화하면 개인키로만 복호화 할 수 있고, 개인키로 암호화하면 공개키로만 복호화 할 수 있다.

암호화 키와 복호화 키가 다르기에 비대칭키 암호화 라고도 불림.

 

AES보다 연산이 복잡해서 속도가 좀 많이 느리다 -_- 

그래서 HTTPS는 두 방식을 섞어서 사용함.

접속 초기에는 공개키 방식으로 대칭키를 안전하게 교환하고, 교환된 대칭키로 실제 데이터를 빠르게 암호화해서 통신.

 

 

 

 

 

 

즉, 애초에 비밀키를 공유할 필요가 없다는거임.

Bob은 공개키를 길바닥에 뿌려놓고, Alice는 공개키를 주워다가 데이터를 암호화해서 보낸다.

개인키는 Bob이 가지고 있으니 누군가 데이터를 가로채더라도 어차피 열 수 없음. 

 

 

 


 

 

 

 

어떻게 이게 가능한건지..? Rivest, Shamir, Adelson Algorithm (RSA) 덕분에 가능하다.

 

큰 수에 대한 소인수분해는 컴퓨터가 처리하기 어렵다.

개인키를 모르는 공격자는 큰 수 소인수분해로 암호를 풀어야 하는데, 이게 시간이 너무 오래걸림.

 

1. 두 소수 선택 : 수백 자릿수의 소수 p와 q를 선택한다.

2. modular 연산 : p와 q의 곱으로 n을 만든다. n은 공개되지만 p와 q는 공개되지 않음 (n = p * q)

3. 오일러 피 함수 z 계산 : z는 n보다 작으면서 n과 서로소인 양의 정수의 개수를 의미한다. (z = (p - 1) * (q - 1))

4. 공개 지수 e 선택 : 1 < e < z 를 만족하며 z와 서로소인 e를 선택한다.

5. 개인키 d 계산 : (e * d) mod z = 1 을 만족하는 d를 찾는다. d는 공개되지 않음. 

 

키가 모두 생성됐으니 공개키와 개인키를 사용해 데이터를 주고받음.

 

Encryption : c = m^e mod n

Decryption : m = c^d mod n

 

여기서 m은 평문, c는 암호문 

평문과 암호문은 문자열이긴 한데, 어차피 컴퓨터는 모든 문자열을 숫자로 저장한다. 

그러니 문자열도 RSA 입장에서는 그냥 긴 숫자일 뿐임.

 

 

 

 


 

 

 

 

공개키 암호화는 아무나 읽을 수 없게 암호화하는 작업에 집중하고, 전자서명과 인증서는 보낸 사람이 진짜 그 사람이 맞는지 확인한다.

 

 

Digital Signature

공개키 암호화는 공개키로 암호화하고 개인키로 복호화하지만, 전자서명은 개인키로 암호화하고 공개키로 복호화한다. 반대임.

아 근데 사실 RSA에서도 개인키로 암호화하고 공개키로 복호화하는것도 가능하긴 함. 

아무튼 내 개인키로 암호화 할 수 있는 사람은 나밖에 없으니까 이게 곧 Signature가 된다.

 

1. Hashing : 보낼 문서의 내용에 해시 함수를 적용해 해시화 

2. Signing : 이 해시 값을 송신자의 개인키로 암호화한다. 

3. Verification : 수신자는 송신자의 공개키로 서명을 복호화하고 해시 값을 확인한다. 

 

 

Certificate

그 공개키가 진짜 그 사람인거를 확인하기 위해 인증서 개념이 도입됨. 

Alice가 Bob의 공개키라고 믿고 데이터를 보냈는데, 해커가 자신의 공개키를 Bob인 척 속여서 뿌렸을 수 있음 (MITM)

그러니 제3자가 보증해줘야함.

 

정부나 은행같은 Certificate Authority가 개인의 신원을 확인하고 도장찍어주는 전자문서를 인증서라고 부른다.

Public Key Infrastructure 구조로, 최상위 CA가 하위 CA를 인증하고 하위 CA가 사용자를 인증하는 트리 구조로 구성됨.

 

소유자의 신원 정보, 공개키, 유효 기간, 인증 기관의 정보 등 소유자의 메타정보가 포함됨. 

 

인증서는 .pem 확장자를 사용한다.

인증서를 만들 때는 openssl 를 사용함. 

 

 

 

정리하면... RSA는 비밀을 지키는 법이고 서명과 인증서는 사기 안당하는 법임.

서명은 사실 인증서 때문에 도입된 개념. 인증서를 사용할 때 서명이 필요하다. 

 

 

 

 

 

 

반응형
저작자표시 (새창열림)

'Computer Science > Computer Network' 카테고리의 다른 글

[Computer Network] Multimedia Streaming  (0) 2025.12.14
[Computer Network] IP Address  (0) 2025.12.13
[Computer Network] Router  (0) 2025.12.13
[Computer Network] Congestion Control  (0) 2025.11.02
[Computer Network] Transmission Control Protocol  (1) 2025.10.15

댓글

이 글 공유하기

  • 구독하기

    구독하기

  • 카카오톡

    카카오톡

  • 라인

    라인

  • 트위터

    트위터

  • Facebook

    Facebook

  • 카카오스토리

    카카오스토리

  • 밴드

    밴드

  • 네이버 블로그

    네이버 블로그

  • Pocket

    Pocket

  • Evernote

    Evernote

다른 글

  • [Computer Network] Multimedia Streaming

    [Computer Network] Multimedia Streaming

    2025.12.14
  • [Computer Network] IP Address

    [Computer Network] IP Address

    2025.12.13
  • [Computer Network] Router

    [Computer Network] Router

    2025.12.13
  • [Computer Network] Congestion Control

    [Computer Network] Congestion Control

    2025.11.02
다른 글 더 둘러보기

정보

천천히 꾸준히 조용히 블로그의 첫 페이지로 이동

천천히 꾸준히 조용히

  • 천천히 꾸준히 조용히의 첫 페이지로 이동

검색

방문자

  • 전체 방문자
  • 오늘
  • 어제

카테고리

  • 분류 전체보기 (664)
    • Algorithm (205)
      • Data Structure (5)
      • Theory && Tip (33)
      • Baekjoon (166)
      • ALGOSPOT (1)
    • Spring (123)
      • Spring (28)
      • Spring Web MVC (20)
      • Spring Database (14)
      • Spring Boot (6)
      • Spring 3.1 (11)
      • Spring Batch (6)
      • Spring Security (16)
      • JPA (12)
      • Spring Data JPA (5)
      • QueryDSL (4)
      • eGovFramework (1)
    • Programming Language (74)
      • C (25)
      • C++ (12)
      • Java (19)
      • JavaScript (15)
      • Python (1)
      • PHP (2)
    • Computer Science (142)
      • Machine Learning (38)
      • Operating System (18)
      • Computer Network (28)
      • System Programming (22)
      • Universial Programming Lang.. (8)
      • Computer Architecture (4)
      • Compiler Design (11)
      • Computer Security (13)
    • Database (21)
      • Database (7)
      • MySQL (3)
      • Oracle (3)
      • Redis (5)
      • Elasticsearch (3)
    • DevOps (20)
      • Docker && Kubernetes (8)
      • Jenkins (4)
      • Amazon Web Service (8)
    • Mobile (28)
      • Android (21)
      • Flutter (7)
    • 💡 솔루션 (16)
    • 💬 기록 (10)
    • 📚 공부 (0)
    • 📝 낙서장 (25)

최근 글

나의 외부 링크

메뉴

  • 홈
반응형

정보

i3months의 천천히 꾸준히 조용히

천천히 꾸준히 조용히

i3months

블로그 구독하기

  • 구독하기
  • RSS 피드

티스토리

  • 티스토리 홈
  • 이 블로그 관리하기
  • 글쓰기
Powered by Tistory / Kakao. Copyright © i3months.

티스토리툴바