Notice
Recent Posts
Recent Comments
Link
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

개발자공부일기

대칭키, 비대칭키 암호화 본문

TIL(Today I Learned)

대칭키, 비대칭키 암호화

JavaCPP 2025. 1. 8. 20:45

대칭키 암호화

대칭키 암호화(Symmetric Key Encryption)는 하나의 비밀키를 사용해 데이터를 암호화하고 복호화하는 방식입니다. 송신자와 수신자가 동일한 키를 공유하며, 암호화 속도가 빠르고 구현이 간단하여 널리 사용됩니다. 하지만 키 분배 문제와 키 관리의 어려움이 단점으로 지적됩니다.

 

암호화 방식

1. 블록형(Block Cipher)

입력을 고정된 크기의 블록으로 나누어 암호화하며, 각 블록은 독립적이거나 이전 블록과 연관된 방식으로 처리됩니다.

  • AES (Advanced Encryption Standard)
    • 개요: 미국 NIST에서 표준화한 알고리즘. DES의 후속으로 개발.
    • 작동 방식:
      1. 데이터를 128비트 크기로 나눔.
      2. 초기 라운드 키 추가 후 여러 라운드를 거침.
        • SubBytes: 비선형 치환 테이블(S-Box)을 사용해 바이트 대체.
        • ShiftRows: 행 데이터를 이동시켜 혼합.
        • MixColumns: 열 데이터를 변환해 복잡성 증가.
        • AddRoundKey: 키 스케줄링으로 생성된 라운드 키를 추가.
      3. 마지막 라운드에서는 MixColumns 단계를 생략.
    • 특징: 보안성과 속도에서 뛰어나며, 현재 가장 널리 쓰임.
  • DES (Data Encryption Standard)
    • 개요: IBM이 개발한 초기 암호화 표준. 56비트 키를 사용.
    • 작동 방식:
      1. 데이터를 64비트 블록으로 나누고 초기 순열 적용.
      2. 16 라운드의 Feistel 구조를 사용해 데이터를 변환.
      3. 최종 순열을 적용해 암호문 생성.
    • 단점: 짧은 키 길이로 인해 현재는 안전하지 않음.
  • 3DES (Triple DES)
    • 개요: DES를 3번 반복해 보안을 강화한 방식.
    • 작동 방식:
      1. 데이터를 암호화-복호화-암호화(Encrypt-Decrypt-Encrypt) 방식으로 처리.
    • 특징: 보안성이 증가했지만 처리 속도가 느림.
  • Blowfish
    • 개요: DES 대안으로 개발된 알고리즘. 키 길이가 가변적(32~448비트).
    • 작동 방식: 데이터를 64비트 블록으로 처리하며, 16 라운드의 Feistel 구조 사용.
    • 특징: 빠르고 효율적이며, 라이센스 제한이 없음.
  • Twofish
    • 개요: Blowfish의 후속 알고리즘으로 고속성과 보안성을 강화.
    • 작동 방식:
      1. 데이터를 128비트 블록으로 처리.
      2. 키 스케줄링을 통해 암호화 과정을 복잡하게 설계.
    • 특징: AES 후보 중 하나로 선정되었지만, AES만큼 널리 사용되지는 않음.

2. 스트림형(Stream Cipher)

  • RC4 (Rivest Cipher 4)
    • 개요: 간단한 스트림 암호화 알고리즘. 키 스트림을 생성하여 데이터를 XOR 연산으로 암호화.
    • 작동 방식:
      1. 키 스트림을 생성하기 위해 KSA(Key Scheduling Algorithm)와 PRGA(Pseudo-Random Generation Algorithm) 사용.
      2. 생성된 키 스트림과 평문을 XOR하여 암호화 수행.
    • 단점: 취약점(WEP 취약성 등)으로 현재는 사용이 줄어듦.
  • ChaCha20
    • 개요: RC4의 대안으로 설계된 고속 스트림 암호화 알고리즘.
    • 작동 방식:
      1. 512비트 상태를 초기화(키, 카운터, 논스 포함).
      2. 20번의 라운드로 데이터를 혼합하여 키 스트림 생성.
      3. 키 스트림과 데이터를 XOR하여 암호화 수행.
    • 특징: 빠르고 안전하며 모바일 환경에서 효율적.
  • Salsa20
    • 개요: ChaCha20의 전신으로 설계된 스트림 암호화 알고리즘.
    • 작동 방식: ChaCha20과 유사하지만, 상태 업데이트 방식이 다름.
    • 특징: 간단하면서도 효율적인 설계.

대칭키의 장단점

장점

  1. 속도가 빠름: 비대칭키 암호화에 비해 암호화 및 복호화 속도가 훨씬 빠름.
  2. 구현이 간단함: 알고리즘이 비교적 단순하여 다양한 환경에서 사용 가능.
  3. 효율성: 짧은 키로도 높은 보안성을 제공.

단점

  1. 키 분배의 어려움: 키를 안전하게 송신자와 수신자 간에 공유하는 것이 어려움.
  2. 확장성 부족: 다수의 사용자와 통신할 경우, 각 사용자마다 별도의 키를 유지해야 함.
  3. 보안 문제: 키가 유출되면 모든 통신 내용이 노출될 위험이 있음.

대칭키 암호화 방식에 대해 추가로 궁금한 점이 있거나 구현 예제를 원하면 알려주세요!

 

 

비대칭키 암호화

개념

비대칭키 암호화(Asymmetric Key Encryption)는 공개키(Public Key)와 개인키(Private Key)라는 서로 다른 두 개의 키를 사용하여 데이터를 암호화하거나 복호화하는 암호화 방식입니다.

  • 공개키: 데이터를 암호화하는 데 사용되며 누구나 접근 가능.
  • 개인키: 암호화된 데이터를 복호화하는 데 사용되며, 소유자만 보관.
    이 방식은 주로 인증, 디지털 서명, 키 교환 프로토콜 등에서 사용됩니다.

암호화 방식

1. 공개키 암호화 알고리즘

  • RSA (Rivest–Shamir–Adleman)
    • 개요: 소인수분해의 계산적 어려움을 기반으로 설계된 알고리즘. 가장 널리 사용되는 공개키 암호화 방식.
    • 작동 방식:
      1. 두 소수 ppqq를 선택하여 n=p×qn = p \times q 계산.
      2. ϕ(n)=(p−1)(q−1)\phi(n) = (p-1)(q-1)를 계산하고, ee를 선택하여 1<e<ϕ(n)1 < e < \phi(n)이며, eeϕ(n)\phi(n)과 서로소.
      3. ddd×emod  ϕ(n)=1d \times e \mod \phi(n) = 1을 만족하도록 계산.
      4. 암호화: C=Memod  nC = M^e \mod n (M: 평문, C: 암호문).
      5. 복호화: M=Cdmod  nM = C^d \mod n.
    • 특징:
      • 키 길이에 따라 보안성이 결정되며, 2048비트 이상의 키가 권장됨.
      • 키 생성이 느리지만, 비교적 단순한 구조로 널리 사용됨.
    • 사용 사례: HTTPS, 디지털 서명, 전자 인증서.
  • Elliptic Curve Cryptography (ECC)
    • 개요: 타원 곡선 방정식을 기반으로 RSA보다 짧은 키 길이로 높은 보안을 제공.
    • 작동 방식:
      1. 타원 곡선 y2=x3+ax+by^2 = x^3 + ax + b를 설정하고 곡선 위의 점 연산을 정의.
      2. 개인키 dd와 공개키 Q=dGQ = dG를 생성(GG: 기본 점).
      3. 암호화와 복호화는 타원 곡선 상에서의 산술 연산으로 처리.
    • 특징:
      • RSA 대비 짧은 키로 동일한 보안성을 제공(256비트 ECC ≈ 3072비트 RSA).
      • 연산량이 적고, 모바일 환경 및 IoT 디바이스에서 유리.
    • 사용 사례: 암호화폐(비트코인, 이더리움), TLS, 디지털 인증서.
  • ElGamal
    • 개요: 이산 로그 문제를 기반으로 설계된 암호화 방식.
    • 작동 방식:
      1. 공개키: (p,g,h)(p, g, h), 개인키: xx.
      2. 암호화: C=(gk,m⋅hk)C = (g^k, m \cdot h^k) (mm: 평문, kk: 난수).
      3. 복호화: m=C2/C1xm = C_2 / C_1^x.
    • 특징:
      • 암호화는 단순하지만, 암호문의 크기가 평문보다 커지는 단점이 있음.
    • 사용 사례: 디지털 서명, 키 교환.

2. 비대칭키와 디지털 서명

  • 디지털 서명:
    데이터를 송신자의 개인키로 암호화(서명)하여 송신자의 신원을 보장하고, 데이터 무결성을 검증.
    1. 송신자는 데이터를 개인키로 서명.
    2. 수신자는 공개키로 서명을 복호화하고, 원본 데이터와 비교하여 무결성을 확인.
  • ECDSA (Elliptic Curve Digital Signature Algorithm)
    • ECC를 기반으로 한 디지털 서명 알고리즘.
    • 특징: 짧은 서명 크기와 빠른 검증 속도.
    • 사용 사례: 암호화폐(비트코인, 이더리움).

비대칭키의 장단점

장점

  1. 키 분배 용이: 공개키를 자유롭게 공유할 수 있어 키 관리의 부담이 적음.
  2. 보안성 강화: 개인키 유출만 방지하면 통신이 안전함.
  3. 다양한 활용: 인증, 키 교환, 디지털 서명 등 다양한 보안 서비스 제공.

단점

  1. 속도 저하: 대칭키 암호화에 비해 연산 속도가 느려 대량 데이터 암호화에는 부적합.
  2. 키 길이 부담: RSA와 같은 알고리즘은 긴 키를 요구해 계산량과 리소스 소모가 많음.
  3. 복잡성 증가: 알고리즘 설계와 구현이 대칭키 방식보다 어려움.

 

하이브리드 암호화

개념

하이브리드 암호화는 대칭키 암호화비대칭키 암호화를 결합하여 사용하는 방식입니다. 이 방식은 대칭키 암호화의 빠른 속도와 비대칭키 암호화의 보안성을 결합하여 효율적이고 안전한 암호화 시스템을 제공합니다.

  • 대칭키 암호화는 데이터 암호화 속도가 빠르지만, 키를 안전하게 공유하는 데 문제가 있을 수 있습니다.
  • 비대칭키 암호화는 키 분배에 안전하지만 암호화 및 복호화 속도가 상대적으로 느립니다.

따라서 하이브리드 암호화에서는 대칭키로 데이터를 암호화하고, 이 대칭키를 비대칭키(공개키)로 암호화하여 안전하게 전송합니다. 이 방식은 보안성과 성능을 동시에 고려하는 방법입니다.

하이브리드 암호화는 현대의 보안 시스템에서 매우 중요한 역할을 하며, SSL/TLS와 같은 암호화 통신 프로토콜에서 널리 사용됩니다.

하이브리드 암호화의 동작 방식

  1. 대칭키 생성
    • 송신자는 먼저 대칭키(세션 키)를 임의로 생성합니다. 대칭키는 AES, RC4 등의 대칭키 암호화 알고리즘을 사용할 수 있습니다.
  2. 데이터 암호화
    • 송신자는 생성한 대칭키를 사용하여 데이터를 암호화합니다. 대칭키는 데이터를 암호화하고 복호화하는 데 동일한 키를 사용하므로 속도가 매우 빠릅니다.
  3. 대칭키 암호화
    • 대칭키는 비대칭키 암호화 방식을 사용하여 받는 사람의 공개키로 암호화됩니다. 이 암호화된 대칭키는 공개된 네트워크를 통해 안전하게 전송됩니다.
  4. 데이터 전송
    • 암호화된 데이터암호화된 대칭키가 수신자에게 전송됩니다.
  5. 대칭키 복호화
    • 수신자는 자신의 개인키를 사용하여 암호화된 대칭키를 복호화하고, 그 대칭키로 데이터를 복호화합니다.

이 과정에서 대칭키는 빠른 속도를 보장하고, 비대칭키는 대칭키의 안전한 전송을 보장합니다.

 

 

하이브리드 암호화의 장단점

장점

  1. 보안성 강화:
    • 비대칭키 암호화는 공개키를 안전하게 사용할 수 있어 대칭키의 안전한 전송을 보장합니다.
    • 대칭키 암호화의 빠른 속도와 비대칭키 암호화의 보안성을 결합하여 높은 보안성을 제공합니다.
  2. 속도와 효율성:
    • 대칭키 암호화는 데이터를 빠르게 암호화할 수 있기 때문에, 대량의 데이터 처리에 효율적입니다.
    • 비대칭키 암호화는 대칭키만 안전하게 전송하면 되므로, 전체적인 암호화 시스템의 성능을 높일 수 있습니다.
  3. 키 관리 용이:
    • 대칭키 암호화의 경우, 키 관리와 분배가 중요하지만, 하이브리드 암호화에서는 대칭키를 비대칭키로 암호화하여 안전하게 키를 전송할 수 있습니다.

단점

  1. 복잡성:
    • 두 가지 방식(대칭키와 비대칭키)을 결합하여 사용하므로, 시스템 구현이 복잡하고 자원 소모가 많을 수 있습니다.
  2. 속도:
    • 비대칭키 암호화 자체가 상대적으로 느리기 때문에, 하이브리드 암호화에서 비대칭키로 대칭키를 암호화하는 과정이 시간과 자원을 소모할 수 있습니다.
  3. 키 길이에 따른 부담:
    • 비대칭키는 키 길이가 길어질수록 성능이 떨어지기 때문에, 매우 긴 키를 사용하는 경우 시스템 성능에 영향을 미칠 수 있습니다.

 

단방향 암호화 (One-Way Encryption)

개념

단방향 암호화는 암호화된 데이터(혹은 해시 값)에서 원래 데이터를 복원할 수 없는 방식의 암호화입니다. 즉, 단방향 암호화는 복호화 불가능한 암호화 방식으로, 일방적인 변환만 가능하고 변환된 값을 원래 값으로 되돌리는 것은 불가능합니다. 이를 통해 데이터의 무결성을 확인하거나 비밀번호 보호와 같은 용도로 사용됩니다. 일반적으로 해시 함수(hash function)가 대표적인 단방향 암호화 방식입니다.

주요 특징

  1. 복호화 불가: 단방향 암호화는 데이터를 암호화한 후 원본 데이터를 복원할 수 없습니다. 즉, 암호화된 결과는 해시값으로 표현되며, 이 해시값을 통해 원래 데이터를 다시 찾는 것은 불가능합니다.
  2. 고정 길이 출력: 단방향 암호화에서 생성된 해시 값은 입력 크기와 관계없이 고정된 길이를 갖습니다. 예를 들어, MD5, SHA-1, SHA-256 해시 값은 항상 일정한 길이를 가집니다.
  3. 충돌 저항성: 이상적인 해시 함수는 서로 다른 입력값에 대해 동일한 해시 값을 생성하지 않도록 설계되어야 합니다. 이를 충돌 저항성이라고 합니다.
  4. 빠른 계산: 단방향 암호화는 빠르게 처리되도록 설계되어 있어, 대규모 데이터에 대해 빠른 처리가 가능합니다.

단방향 암호화 알고리즘들에 대한 자세한 설명

  1. MD5 (Message Digest Algorithm 5)
    • 개요: MD5는 매우 널리 사용된 해시 함수로, **128비트(16바이트)**의 해시 값을 생성합니다.
    • 작동 방식:
      1. MD5는 메시지를 512비트 블록 단위로 나누어 처리합니다.
      2. 각 블록에 대해 패딩을 추가하여 메시지의 길이가 512비트의 배수가 되도록 만듭니다.
      3. 주어진 입력에 대해 다섯 개의 32비트 레지스터를 사용하여 반복적인 변환과 조작을 통해 최종적인 128비트 해시 값을 생성합니다.
    • 장점:
      • 빠른 처리 속도와 간단한 구현.
    • 단점:
      • 충돌 취약점: MD5는 충돌이 발생할 수 있는 경우가 있기 때문에, 현재는 보안적으로 취약하다고 간주됩니다.
      • 예를 들어, 두 개의 서로 다른 입력값에 대해 같은 MD5 해시 값이 생성될 수 있습니다.
    • 사용 사례: 주로 파일 무결성 검사, 디지털 서명 등에 사용되었지만, 보안상 취약점으로 인해 현재는 많이 사용되지 않습니다.
  2. SHA-1 (Secure Hash Algorithm 1)
    • 개요: SHA-1은 160비트 해시 값을 생성하는 해시 함수로, 1993년 NIST에서 발표되었습니다.
    • 작동 방식:
      1. SHA-1은 메시지를 512비트 블록 단위로 나누고, 각 블록을 처리하면서 패딩을 추가하여 해시 값을 생성합니다.
      2. 160비트의 해시 값을 생성하기 위해 80라운드의 반복 작업을 수행합니다.
    • 장점:
      • MD5보다 좀 더 안전한 해시 함수로 널리 사용되었습니다.
    • 단점:
      • SHA-1도 충돌에 취약하며, 이론적으로는 더 많은 충돌이 발생할 수 있다고 연구 결과가 발표되었습니다.
      • 구글의 SHAttered 프로젝트에서는 SHA-1의 충돌을 발견하여, SHA-1이 더 이상 안전하지 않음을 입증하였습니다.
    • 사용 사례: 주로 디지털 서명, HTTPS 인증서 등에서 사용되었습니다. 하지만 현재는 보안 취약점이 발견되어 점차 다른 해시 알고리즘으로 대체되고 있습니다.
  3. SHA-2 (Secure Hash Algorithm 2)
    • 개요: SHA-2는 SHA-1의 후속으로 224비트, 256비트, 384비트, 512비트의 해시 값을 생성하는 알고리즘입니다. 현재 SHA-256이 가장 널리 사용되고 있습니다.
    • 작동 방식:
      1. SHA-2는 메시지를 512비트 블록 단위로 나누어 처리하고, 각 블록에 대해 패딩을 추가하여 해시 값을 생성합니다.
      2. 256비트 해시 값을 생성하는 SHA-256은 SHA-1보다 더 많은 라운드를 사용하여 복잡하게 해시 값을 생성합니다.
    • 장점:
      • 충돌 저항성이 뛰어나고 보안성이 매우 높습니다.
      • SHA-2는 현재까지도 안전하게 사용되고 있으며, SHA-1을 대체하는 표준으로 자리잡고 있습니다.
    • 단점:
      • SHA-1보다 계산량이 많고, 다소 느리다는 단점이 있지만, 보안상 장점이 우선시되어 널리 사용되고 있습니다.
    • 사용 사례: 암호화폐(예: 비트코인), 디지털 서명, TLS/SSL 등에서 널리 사용됩니다.
  4. bcrypt
    • 개요: bcrypt는 주로 비밀번호 해싱에 사용되는 알고리즘입니다. bcrypt는 상수 시간 복잡도로 설계되어, 공격자가 브루트포스 공격을 통해 비밀번호를 추측하기 어렵게 만듭니다.
    • 작동 방식:
      1. bcrypt는 **솔트(salt)**를 사용하여 비밀번호를 해싱합니다. 솔트는 임의의 데이터를 추가하여 동일한 비밀번호라도 매번 다른 해시 값을 생성하게 만듭니다.
      2. bcrypt는 비밀번호를 여러 번 반복해서 해싱하는 방식으로, 계산 비용을 인위적으로 증가시킵니다.
    • 장점:
      • 시간 복잡도를 높여 공격자가 비밀번호를 추측하는 데 시간을 오래 걸리게 만듭니다.
      • 솔트를 사용하여 동일한 비밀번호에 대해 항상 다른 해시 값을 생성합니다.
    • 단점:
      • 계산 비용이 높아, 대량의 비밀번호를 처리해야 하는 시스템에서는 성능에 영향을 미칠 수 있습니다.

단방향 암호화의 사용 사례

  1. 비밀번호 저장
    • 비밀번호를 해시화하여 데이터베이스에 저장하면, 해커가 데이터베이스를 탈취하더라도 실제 비밀번호를 알 수 없습니다. 비밀번호를 비교할 때는 입력된 비밀번호를 다시 해싱하여 저장된 해시와 비교합니다.
  2. 디지털 서명
    • 해시 함수는 디지털 서명에서 사용됩니다. 서명자는 메시지의 해시 값을 서명하고, 수신자는 서명된 해시 값을 검증하여 메시지의 무결성을 확인합니다.
  3. 파일 무결성 검사
    • 파일을 다운로드한 후, 제공된 해시 값과 다운로드한 파일의 해시 값을 비교하여 파일이 변조되지 않았는지 확인할 수 있습니다.
  4. 블록체인 및 암호화폐
    • 블록체인 기술에서는 트랜잭션을 해시하여 블록에 포함시킵니다. 이를 통해 데이터의 변조를 방지하고, 데이터의 무결성을 확인할 수 있습니다.

단방향 암호화의 장점

  1. 보안성: 복호화 불가능한 특성 덕분에 민감한 데이터를 안전하게 보호할 수 있습니다.
  2. 무결성 검증: 해시 값만으로도 데이터의 변조 여부를 쉽게 확인할 수 있습니다.
  3. 효율성: 입력 데이터를 고정된 크기로 변환하여 비교할 수 있기 때문에 매우 효율적입니다.

단방향 암호화의 단점

  1. 복호화 불가: 데이터를 복원할 수 없으므로, 원본 데이터가 필요한 경우 사용할 수 없습니다.
  2. 충돌 가능성: 해시 함수에 따라 충돌이 발생할 수 있는 가능성이 있으며, 이는 보안에 영향을 미칠 수 있습니다.

단방향 암호화는 특히 비밀번호 저장무결성 검사 등 보안에서 중요한 역할을 하며, 시스템 설계에서 중요한 부분을 차지합니다.

 

 

PEM (Privacy-Enhanced Mail)

PEMPrivacy-Enhanced Mail의 약자로, 원래 이메일 보안을 위한 프로토콜이었지만, 현재는 주로 암호화된 파일 형식을 나타내는 용어로 사용됩니다. PEM 형식은 주로 인증서암호화된 데이터를 저장하고 전송하는 데 사용됩니다. PEM은 Base64 인코딩을 사용하여 바이너리 데이터를 텍스트 형식으로 변환하고, 이를 인코딩된 텍스트로 표현할 수 있게 해 줍니다.

 

PEM 파일 형식

PEM 형식은 텍스트 파일Base64로 인코딩된 데이터를 포함하고 있으며, 이 데이터는 보통 암호화된 인증서, , 서명 등을 포함할 수 있습니다. PEM 파일은 두 가지 주요 요소로 구분됩니다:

  1. 헤더: 텍스트로 시작하여 파일의 종류를 설명합니다. 예를 들어, X.509 인증서 파일의 경우 -----BEGIN CERTIFICATE-----로 시작하며, 그 끝은 -----END CERTIFICATE-----로 마칩니다.
  2. Base64 인코딩된 데이터: 헤더와 푸터 사이에 Base64로 인코딩된 데이터가 포함됩니다. 이 데이터는 일반적으로 암호화된 인증서나 키입니다.

PEM의 구성 요소

PEM 파일은 주로 다음과 같은 암호화 관련 데이터를 포함합니다:

  1. 인증서 (Certificate): 공개 키 기반 암호화 시스템에서 사용되는 인증서를 나타냅니다. 이 인증서는 서버의 공개 키를 포함하고 있으며, 일반적으로 X.509 형식을 따릅니다. PEM 형식의 인증서는 -----BEGIN CERTIFICATE-----와 -----END CERTIFICATE----- 사이에 Base64로 인코딩된 데이터를 포함합니다.
  2. 개인 키 (Private Key): 인증서에 대한 비공개 키로, 이 파일은 -----BEGIN PRIVATE KEY-----와 -----END PRIVATE KEY----- 사이에 인코딩된 데이터를 포함합니다.
  3. 공개 키 (Public Key): 개인 키에 대응하는 공개 키입니다. 일반적으로 인증서나 공개 키 파일로 저장되며, -----BEGIN PUBLIC KEY-----와 -----END PUBLIC KEY----- 사이에 포함됩니다.
  4. 서명 (Signature): 인증서나 데이터에 서명된 해시 값으로, 주로 인증서의 진위 여부를 확인하는 데 사용됩니다.

PEM의 주요 특징

  1. 텍스트 형식: PEM은 Base64로 인코딩된 텍스트 형식으로 되어 있어, 쉽게 사람에게 읽히며 전송할 수 있습니다. 이로 인해 PEM 파일은 일반적으로 이메일 또는 네트워크를 통한 전송에 유리합니다.
  2. 호환성: PEM 파일은 다양한 암호화 도구에서 지원됩니다. 예를 들어, OpenSSL, Java, Python 등에서 PEM 형식을 사용할 수 있습니다.
  3. 파일 확장자: PEM 파일의 확장자는 보통 .pem이지만, 인증서의 경우 .crt, .cer 등의 확장자도 사용될 수 있습니다.
  4. 암호화 형식: PEM은 암호화된 파일을 텍스트 형식으로 표현하기 위해 Base64 인코딩을 사용합니다. 이 덕분에 이진 파일을 텍스트 형식으로 안전하게 전송할 수 있습니다.

PEM의 사용 사례

  1. SSL/TLS 인증서: PEM 형식은 SSL/TLS 인증서를 저장하는 데 널리 사용됩니다. 특히 웹 서버와 클라이언트 간의 안전한 통신을 보장하는 데 필요한 인증서 파일을 저장할 때 많이 사용됩니다.
  2. 공개 키 인프라(PKI): 공개 키 인프라에서 사용하는 인증서와 키는 PEM 형식으로 저장됩니다. 인증 기관(CA)이 발급한 인증서가 PEM 형식으로 저장되어 웹 서버 등에 설치됩니다.
  3. 암호화 및 서명: PEM은 비공개 키와 공개 키 파일을 저장하는 데에도 사용됩니다. 이러한 키는 암호화 및 서명 프로세스에서 중요합니다.
  4. OpenSSL: OpenSSL은 PEM 파일을 사용하여 인증서, 개인 키, 공개 키 등을 저장하고 관리합니다. OpenSSL 명령어를 사용하여 PEM 형식의 파일을 생성하거나 변환할 수 있습니다.

PEM과 다른 파일 형식과의 차이점

PEM 파일 형식은 Base64 인코딩된 데이터를 포함하는 텍스트 형식이기 때문에 다른 이진 형식과 비교할 때 사람이 읽을 수 있는 형태로 데이터를 표현합니다. 이에 반해 다른 형식인 DER(Distinguished Encoding Rules)는 바이너리 형식으로, PEM에 비해 크기가 작지만 사람이 읽을 수 없습니다.

  • PEM: 텍스트 형식(Base64 인코딩), 사람 읽을 수 있음
  • DER: 바이너리 형식, 사람 읽을 수 없음

PEM 파일 변환 예시

  1. PEM → DER: OpenSSL을 사용하여 PEM 형식의 인증서를 DER 형식으로 변환할 수 있습니다.
  2. openssl x509 -in certificate.pem -outform DER -out certificate.der
  3. DER → PEM: DER 형식의 인증서를 PEM 형식으로 변환할 수 있습니다.
  4. openssl x509 -in certificate.der -inform DER -out certificate.pem -outform PEM
  5. PEM → P12(PFX): PEM 형식의 인증서를 P12(PFX) 형식으로 변환하려면 다음과 같이 할 수 있습니다.
  6. openssl pkcs12 -export -in certificate.pem -out certificate.p12

PEM의 장점

  1. 텍스트 형식으로 전송 가능: PEM은 Base64로 인코딩되어 있어, 이메일 또는 다른 텍스트 기반 프로토콜을 통해 안전하게 전송할 수 있습니다.
  2. 표준화된 형식: PEM은 다양한 보안 프로토콜 및 시스템에서 널리 사용됩니다.
  3. 손쉬운 관리: 인증서나 키 파일을 PEM 형식으로 저장하면 쉽게 확인하고 관리할 수 있습니다.

PEM의 단점

  1. 크기 증가: Base64 인코딩은 데이터를 약 33% 더 늘리기 때문에, PEM 파일은 원본 바이너리 형식보다 크기가 커질 수 있습니다.
  2. 이진 데이터 전송 시 성능 저하: 이진 파일을 텍스트 형식으로 변환하면 성능에 영향을 줄 수 있습니다.

PEM 형식은 오늘날 많은 시스템에서 중요한 역할을 하며, 특히 웹 서버암호화 통신에서 필수적인 역할을 합니다.

'TIL(Today I Learned)' 카테고리의 다른 글

게임에서 쓰이는 삼각함수  (0) 2025.01.07
컴퓨터구조 - CPU  (0) 2025.01.06
버퍼와 스트림  (0) 2025.01.02
Promise와 forEach의 동작 차이  (0) 2024.12.31
I/O(Input/Output) 최적화  (0) 2024.12.30