<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.10.0">Jekyll</generator><link href="https://inpyeong.github.io/feed.xml" rel="self" type="application/atom+xml" /><link href="https://inpyeong.github.io/" rel="alternate" type="text/html" /><updated>2025-10-19T09:01:23+00:00</updated><id>https://inpyeong.github.io/feed.xml</id><title type="html">경험을 기록하는 블로그</title><subtitle>An amazing website.</subtitle><author><name>Inpyeong</name><email>jinipyung@gmail.com</email></author><entry><title type="html">crpytography_symmetric_key</title><link href="https://inpyeong.github.io/ch2-cryptography-symmetrickey/" rel="alternate" type="text/html" title="crpytography_symmetric_key" /><published>2020-10-02T00:00:00+00:00</published><updated>2020-10-02T00:00:00+00:00</updated><id>https://inpyeong.github.io/ch2-cryptography-symmetrickey</id><content type="html" xml:base="https://inpyeong.github.io/ch2-cryptography-symmetrickey/"><![CDATA[<h2 id="symmetric-encryption">Symmetric encryption</h2>
<p>대칭 암호화는 하나의 비밀키가 암호화와 복호화에 모두 사용되는 암호화 알고리즘 형태 중 하나로, conventional / private-key / single-key 등으로 불립니다. 발송자와 수령자는 공통의 키를 공유하게 됩니다.</p>

<p><img src="/assets/images/symmetric-encryption.png" alt="No Image" /></p>

<p>대칭 암호화에서는 보안을 위해 <strong>두 가지 요구사항</strong> 이 있습니다.</p>
<ul>
  <li>강력한 암호화 알고리즘</li>
  <li>오직 sender와 receiver만 알고 있는 비밀키</li>
</ul>

<p>그리고 미리 <strong>가정해야 할 사항</strong> 은 다음과 같습니다.</p>
<ul>
  <li>sender와 receiver는 사용된 암호화 알고리즘이 무엇인지 알고 있다.</li>
  <li>키를 공유할 보안 채널이 있다.</li>
</ul>

<h2 id="one-time-pad">One time pad</h2>
<p>One time pad란, <strong>메시지 m과 같은 크기를 갖는 랜덤 암호키</strong> 와 메시지 m을 XOR 연산을 통해 encryption, decryption을 하는 것을 뜻합니다. 여기서 사용되는 랜덤 암호키는 메시지 송신자와 수신자 둘에게만 공유되며, 메시지를 전송할 때마다 매번 바뀌어야 합니다.</p>

<h3 id="결정적인-약점">결정적인 약점</h3>
<p>One time pad의 결정적인 약점은 바로 메세지의 크기와 암호키의 크기가 같다는 특징에서 발견할 수 있습니다. 만약 메시지의 크기가 1GB라면 암호키의 크기 또한 1GB여야 하는데 이는 너무 비효율적이라 할 수 있습니다. 그리고 안전한 암호키의 공유 또한 힘들기 때문에 이 또한 약점으로도 볼 수 있습니다.</p>

<p>따라서 One time pad는 기밀성(confidentiality)에 대해서 굉장히 완벽한 방법이지만, 현실적으로 쓰이진 않고 있습니다.</p>

<h2 id="symmetric-key">Symmetric key</h2>
<p>대칭 키 암호화에는 두 가지 방법이 존재합니다.</p>
<ul>
  <li><strong>Block cipher</strong>: 정보를 정해진 블록 단위로 암호화한다.
    <ul>
      <li>DES, AES</li>
    </ul>
  </li>
  <li><strong>Streaming cipher</strong>: 유사난수를 연속적으로 생성하여 암호화하려는 자료와 결합하여 암호화한다.
    <ul>
      <li>RC4</li>
    </ul>
  </li>
</ul>

<p><br />
그럼 지금부터 각 암호 방식들에 대해 알아보도록 할까요..?</p>

<h2 id="block-cipher">Block cipher</h2>
<p>앞서 언급했듯이 Symmetric key의 Block cipher는 암호화할 정보를 정해진 블록 단위로 나누어 암호화하는 암호를 말합니다. Block cipher에 속하는 암호 알고리즘은 대표적으로 DES, AES가 있습니다.</p>

<h3 id="des">DES</h3>
<p>DES란 Data Encryption Standard의 약자로, symmetric key의 <strong>Block cipher</strong> 알고리즘 중 하나입니다. IBM에서 고안되어 NIST가 미국 표준 암호 알고리즘으로 채택되었으며, 예전에는 많이 사용되었지만 오늘날 컴퓨터로 쉽게 해독이 가능하기 때문에 이제는 사용할 수 없게 되었습니다.</p>

<p>사용하는 암호키의 크기는 64bit입니다. 이 중에서 8bit는 parity check로 사용하기 때문에 사실상 암호키의 크기는 <strong>56bit</strong> 로 생각하면 됩니다.</p>

<p><br />
Block Cipher이기 때문에 동작 원리는 다음과 같습니다.</p>
<ol>
  <li>암호화할 메시지 m을 여러 개의 64bit 블럭으로 나눈다.</li>
  <li>블럭 단위로 암호화를 실시하는데, 마지막 블럭이 64bit보다 작은 경우 padding을 붙여서 64bit로 만든 후 암호화를 진행한다.</li>
</ol>

<p><br />
<img src="/assets/images/des.png" alt="No Image" width="400px" height="400px" class="center" /></p>

<p>위 그림을 보면서 DES의 원리에 대해 간략히 설명하겠습니다.</p>
<ol>
  <li>암호화할 메시지를 64bit로 쪼갠다.
    <ul>
      <li>쪼개진 것들을 블럭이라고 부른다. 그림에서는 ‘64-bit input’이 한 블럭이라 보면 된다.</li>
    </ul>
  </li>
  <li><strong>permutation</strong> 과정을 통해 비트 간의 순서를 바꾼다.
    <ul>
      <li>permutation 과정을 확대한 이미지는 아래와 같습니다.
<br />
<br />
<img src="/assets/images/des-permutation.png" alt="No Image" width="85%" /></li>
    </ul>
  </li>
  <li>64bit 블럭을 32bit로 나눈 후, 56bit key로부터 생성한 <strong>48bit 랜덤넘버(K)</strong> 와 암호화를 실시한다.
    <ul>
      <li>‘64-bit input’를 32bit로 나누고 순서를 바꾸며 <strong>Mangler Function</strong> 을 쓰는 이러한 구조를 Feistel cipher 라고 한다.</li>
    </ul>
  </li>
  <li>16개의 <strong>round</strong> 동안 이를 반복한다.</li>
</ol>

<p><br />
위에서 나온 용어들에 대해 아래서 다시 설명하겠습니다.</p>

<h3 id="des-round">DES round</h3>
<p>DES의 각 round를 확대한 이미지는 아래와 같습니다.</p>

<p><img src="/assets/images/des-round.png" alt="No Image" width="50%" height="50%" class="center" /></p>

<p>이미지를 보면 Mangler Function에 ‘32-bit Rn’와 48bit의 ‘Kn’이 입력되는 것을 볼 수 있습니다. 두 입력의 bit 수가 맞지 않은데 어떻게 Mangler Function 안에서 연산이 이루어질까요? 이 부분에 대해선 아래에서 설명드리겠습니다.</p>

<p>그리고 Mangler Function의 반환값과 ‘32-bit Ln’에 대해 XOR 연산을 진행합니다. 마지막으로는 ‘32-bit Ln+1’과 ‘32-bit Rn+1’을 concat하여 마지막 permutation 과정을 거치고 하나의 round을 마무리합니다!</p>

<h3 id="mangler-function">Mangler Function</h3>
<p><img src="/assets/images/des-mangler.png" alt="No Image" width="70%" height="70%" class="center" /></p>

<p>위 이미지는 Mangler Function을 확대한 것입니다. 32bit R을 Expansion Function을 통해 48bit로 확대시키고 있는 것을 확인할 수 있습니다. 48bit로 확대한 R과 입력으로 받은 K에 대해 XOR 연산을 진행하고, 그 결과로 나온 48bit를 다시 32bit로 축소하는 과정을 거치게 됩니다.</p>]]></content><author><name>Inpyeong</name><email>jinipyung@gmail.com</email></author><summary type="html"><![CDATA[Symmetric encryption 대칭 암호화는 하나의 비밀키가 암호화와 복호화에 모두 사용되는 암호화 알고리즘 형태 중 하나로, conventional / private-key / single-key 등으로 불립니다. 발송자와 수령자는 공통의 키를 공유하게 됩니다.]]></summary></entry><entry><title type="html">Introduction</title><link href="https://inpyeong.github.io/ch1-Introduction/" rel="alternate" type="text/html" title="Introduction" /><published>2020-09-16T00:00:00+00:00</published><updated>2020-09-16T00:00:00+00:00</updated><id>https://inpyeong.github.io/ch1-Introduction</id><content type="html" xml:base="https://inpyeong.github.io/ch1-Introduction/"><![CDATA[<h2 id="cia">C.I.A</h2>
<p>C.I.A란 보안의 3요소를 말하며, 이어 설명할 Confidentiality(기밀성), Integrity(무결성), Availability(가용성)을 뜻합니다.</p>

<h3 id="confidentiality-기밀성">Confidentiality (기밀성)</h3>
<p>오직 인가된 사람/프로세스/시스템만이 알 필요성에 근거하여 시스템에 접근해야 한다는 원칙입니다.</p>

<p>기밀성 확보를 위한 방법은 다음과 같습니다.</p>
<ul>
  <li><strong>Encryption</strong>
    <ul>
      <li>암호 키를 이용한 정보의 변환으로, 변환된 정보는 암호 해독 키를 통해서만 읽을 수 있습니다. 경우에 따라 암호 해독 키는 암호 키와 동일할 수 있습니다.</li>
    </ul>
  </li>
  <li><strong>Access control</strong>
    <ul>
      <li>인과된 사람들 또는 시스템에게만 비밀 정보 접근을 허용하는 규칙 또는 정책을 말합니다. 인과에 대해서는 사람의 이름이나 컴퓨터의 시리얼 넘버와 같은 identity로 결정합니다.</li>
    </ul>
  </li>
  <li><strong>Authentication</strong>
    <ul>
      <li>상대가 갖는 신분 또는 역할에 대한 확인을 뜻합니다.</li>
      <li>확인 방법은 다음과 같습니다.
        <ul>
          <li>상대가 가지고 있는지? (스마트 키, 공인 인증서)</li>
          <li>상대가 알고 있는지? (비밀번호)</li>
          <li>상대가 맞는지? (생체인식, 손가락 지문, 얼굴 인식)</li>
        </ul>
      </li>
      <li>예전에는 위의 방법들을 따로 사용했었지만, 요즘은 중요한 거래같은 경우 모두 가용한다고 합니다.</li>
    </ul>
  </li>
  <li><strong>Authorization</strong>
    <ul>
      <li>접근 제어(access control) 정책에 기초하여, 사람과 시스템이 자원에 대한 접근이 허용되었는지 확인하는 것입니다. Authorization은 공격자가 시스템을 속여서 보호되는 자원에 대한 접근 권한을 얻는 것을 예방해야만 합니다.</li>
    </ul>
  </li>
  <li><strong>Physical security</strong>
    <ul>
      <li>물리적 보안으로, 컴퓨터의 보호되는 자원에 대한 접근을 제한하기 위해서 물리적인 장애물을 이용하는 것을 말합니다.</li>
      <li>다음과 같은 Physical security가 존재합니다.
        <ul>
          <li>Faraday cage</li>
          <li>금고</li>
        </ul>
      </li>
    </ul>
  </li>
</ul>

<h3 id="integrity-무결성">Integrity (무결성)</h3>
<p>정보는 고의적인, 비인가된, 우연한 변경으로부터 보호되어야 한다는 원칙입니다.</p>

<p>무결성 확보를 위한 방법은 다음과 같습니다.</p>
<ul>
  <li><strong>Backups</strong>
    <ul>
      <li>주기적인 데이터 파일을 보관합니다.</li>
    </ul>
  </li>
  <li><strong>Checksums</strong>
    <ul>
      <li>파일의 컨텐츠와 수치를 연관시키는 함수의 계산입니다.</li>
      <li>checksum 함수는 파일 전체 컨텐츠에 의존적이며, Input 파일의 작은 변화도 매우 다른 결과값을 반환하는 방식으로 디자인되어 있다고 합니다.</li>
    </ul>
  </li>
  <li><strong>Data correcting codes</strong>
    <ul>
      <li>파일의 작은 변화를 쉽게 감지하고 자동으로 수정하는 방식으로 파일을 저장하는 방식을 말합니다.</li>
    </ul>
  </li>
</ul>

<h3 id="availability-가용성">Availability (가용성)</h3>
<p>정보는 사용자가 필요로 하는 시점에 접근 가능해야 한다는 원칙을 말합니다.</p>

<p>가용성 확보를 위한 방법은 다음과 같습니다.</p>
<ul>
  <li><strong>Physical protections</strong>
    <ul>
      <li>물리적 저항에도 정보 이용이 가능하도록 유지하는 것을 의미하는 사회 기반 시설을 말합니다.</li>
    </ul>
  </li>
  <li><strong>Computational redundancies</strong>
    <ul>
      <li>가용성 실패에 대한 대여책 역할을 하는 컴퓨터와 저장 장치들을 이용하는 것을 말합니다.</li>
    </ul>
  </li>
</ul>

<h2 id="aaa">A.A.A</h2>
<p>A.A.A는 Authenticity, Assurance, Anonymity를 뜻합니다. 이 부분은 생략하겠습니다.</p>

<h2 id="threats-and-attacks">Threats and Attacks</h2>
<p>공격자로부터 어떤 위협과 공격이 있는지 알아보겠습니다.</p>

<h3 id="eavesdropping">Eavesdropping</h3>
<p>엿듣기 또는 도청이라는 의미로, 정보가 통신채널에서 전송되는 도중에 의도된 자에게 정보가 interception 되는 것을 말합니다. 하지만 공격자는 정보 자체를 변조하거나 공격하지 않습니다.</p>

<h3 id="alteration">Alteration</h3>
<p>정보의 승인되지 않은 수정이 일어난 경우입니다. 예로 중간자가 메시지를 변조하는, <strong>man-in-the-middle attack</strong> 가 있습니다.</p>

<h3 id="denial-of-service">Denial-of-service</h3>
<p>데이터 서비스 또는 정보 접근이 중단, 악화되는 것을 말합니다. 예로 분산 환경에서 네트워크를 통해 서비스를 중단시키는 <strong>Ddos</strong> 공격이 있습니다.</p>

<h3 id="masquerading">Masquerading</h3>
<p>실제로 인증자가 아닌 누군가가 인증자로 위장하여, 자신이 보낸 정보를 인증자의 정보라고 주장하는 것을 말합니다. 이를 막기 위해서는 강력한 인증 기능이 필요할 것입니다.</p>

<h3 id="repudiation">Repudiation</h3>
<p>생략.</p>

<h3 id="correlation-and-traceback">Correlation and traceback</h3>
<p>생략.</p>

<h2 id="the-ten-security-principles">The Ten Security Principles</h2>
<p>생략.</p>

<h2 id="cryptographic-concepts">Cryptographic Concepts</h2>
<p>암호화 개념에 대해 살펴보겠습니다.</p>

<h3 id="encryption">Encryption</h3>
<p>Alice와 Bob에게 도청의 대상이 되는 안전하지 않은 채널에서 기밀성이 보장되는 통신을 가능하게 해주는 것으로, 암호화한다는 뜻을 갖고 있습니다.</p>

<p>Encryption하기 전 원래 메시지 M을 <strong>plaintext</strong> , encryption 알고리즘을 이용하여 생성한 output을 M의  <strong>cipertext</strong> 라고 부릅니다.</p>

<p>방정식으로는,<br />
<strong>C = E(M)</strong> <br />
<strong>M = D(C)</strong> <br />
로 나타낼 수 있습니다.</p>

<h2 id="caesar-cipher">Caesar Cipher</h2>
<p>인류 역사상 최초 암호화 알고리즘이라고 합니다. 이 알고리즘은 각 영어 문자를 3번째 뒤에 있는 영어 문자로 대체하는 것이라고 합니다.</p>

<h2 id="symmetric-cryptosystems">Symmetric Cryptosystems</h2>
<p><strong>대칭 키 암호화</strong> 라고 부릅니다. Alice와 Bob이 암호 키를 공유하는데, 이 암호키는 encryption와 decryption 모두 가능합니다.</p>

<h3 id="symmetric-key-distribution">Symmetric Key Distribution</h3>
<p>대칭 키 알고리즘의 키 분배에 관한 내용입니다. 사람이 n명(n은 짝수) 있다면, 대칭 키는 총 <strong>n(n-1)/2</strong> 개가 필요합니다. 키가 쌍의 수 만큼 필요하기 때문에, 근본적으로 Key Management에서 힘든 문제가 발생합니다.</p>

<h2 id="public-key-cryptography">Public-Key Cryptography</h2>
<p>공개 키 암호화 알고리즘 입니다. 통신에 참가하는 각 사람들이 한 쌍의 키를 갖고 있습니다. 키는 개인 키(SB), 공개 키(PB)가 있으며, 개인 키는 개인만 알고 있어야 하는 키이며 공개 키는 누구나 알아도 되는 키입니다.</p>

<p><strong>공개 키로 암호화된 메시지는 해당 공개 키에 대응되는 개인 키로만 해독</strong> 할 수 있습니다. 이것이 바로 공개 키 알고리즘의 핵심이라고 볼 수 있습니다.</p>

<h3 id="public-key-distribution">Public Key Distribution</h3>
<p>공개 키 알고리즘의 키 분배에 관한 내용입니다. 사람이 n명(n은 짝수) 있다면, <strong>n쌍의 키</strong> 만 있으면 됩니다. 키 관리 측면에서 대칭 키 알고리즘보다 매우 간단해졌음을 알 수 있습니다.</p>

<h3 id="digital-signitures">Digital Signitures</h3>
<p>공개 키 알고리즘의 <strong>개인 키로 전송할 메시지에 전자 서명</strong> 을 할 수 있습니다. 메시지를 해독하고 싶은 사람은 전자 서명된 메시지를 공개 키로 해독함으로써, 메시지를 보낸 사람이 공개 키의 주인임을 확인할 수 있습니다.</p>

<h2 id="cryptographic-hash-functions">Cryptographic Hash Functions</h2>
<p>암호화 해쉬 함수에 대한 내용입니다. 해쉬 함수 H는 다양한 크기의 메시지가 입력으로 들어와도, 반환 값은 항상 고정된 크기입니다. 예로 sha256 해쉬 함수는 어떤 메시지가 입력되도 랜덤 256비트 문자열을 출력합니다.</p>

<p>해쉬 함수 알고리즘의 특성은 다음과 같습니다.</p>
<ul>
  <li><strong>One-way</strong> (일방향성)
    <ul>
      <li>Y = H(M)을 계산하는 것은 쉽지만, Y로만 M을 찾아내는 것은 어려워야 합니다.</li>
    </ul>
  </li>
  <li><strong>Collision-resistant</strong>
    <ul>
      <li>다른 두 메시지 M과 N으로부터, H(M)과 H(N)은 달라야 합니다.</li>
    </ul>
  </li>
</ul>

<h3 id="message-authentication-codes-mac">Message Authentication Codes (MAC)</h3>
<p>만약 엘리스와 밥이 암호 키(K)를 공유하고 있다면, 둘에게 MAC을 통해 데이터 무결성을 제공해줄 수 있습니다.</p>

<p>다음은 해쉬 함수를 통한 MAC 이용 방법입니다.</p>
<ol>
  <li>주어진 메시지 M이 있다면, 엘리스는 H(K||M)와 메시지 M, K을 밥에게 보냅니다.</li>
  <li>밥은 K와 M을 해쉬 함수의 입력으로 넣어 H(K||M)을 계산합니다.</li>
  <li>밥은 엘리스에게 받은 H(K||M)과 자신이 계산한 H(K||M)이 같은지 확인합니다.</li>
</ol>]]></content><author><name>Inpyeong</name><email>jinipyung@gmail.com</email></author><summary type="html"><![CDATA[C.I.A C.I.A란 보안의 3요소를 말하며, 이어 설명할 Confidentiality(기밀성), Integrity(무결성), Availability(가용성)을 뜻합니다.]]></summary></entry></feed>