<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>tech_hama.log</title>
        <link>https://velog.io/</link>
        <description>기술하마</description>
        <lastBuildDate>Mon, 11 Mar 2024 02:00:00 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>tech_hama.log</title>
            <url>https://velog.velcdn.com/images/tech_hama/profile/27ad0512-3fa6-49bd-a521-c5e7d508b474/image.jpg</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. tech_hama.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/tech_hama" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[CPS / TPS / Throughput / CC]]></title>
            <link>https://velog.io/@tech_hama/CPS-TPS-Throughput-CC</link>
            <guid>https://velog.io/@tech_hama/CPS-TPS-Throughput-CC</guid>
            <pubDate>Mon, 11 Mar 2024 02:00:00 GMT</pubDate>
            <description><![CDATA[<p>네트워크 제품을 도입할 때 자주보이는 용어이며, 네트워크 장비의 계측 시에 해당 단위의 이해가 필요하다.</p>
<h2 id="⚡-cps-connection-per-second">⚡ CPS (Connection Per Second)</h2>
<p>초당 연결 할 수 있는 연결 수를 의미한다.</p>
<p>WAF 계측 시에는 최대 CPS를 측정하기 위해서는 1 Connection의 1개의 요청, 응답사이즈는 1kb로 측정하며, 종료는 Finish로 종료한다.</p>
<p>주의할 점은 한 명의 사용자가 하나의 페이지에 들어간다고 1개의 Connection 이 이뤄지는 것은 아니다.
HTTP/2 가 아닌 경우 브라우저는 요청을 병렬화 하여 6개<code>[기본 값]</code> 정도를 한번에 전달한다.(<code>도메인 샤딩 기술, HTTP/1.1</code>)</p>
<p><img src="https://velog.velcdn.com/images/tech_hama/post/dfebd416-0023-4154-bfb0-796c5d9f2e19/image.png" alt=""></p>
<blockquote>
<p><em>도메인 샤딩</em></p>
<blockquote>
<img src="https://velog.velcdn.com/images/tech_hama/post/4acf76cb-1546-44ef-bdc0-ab9dc96d8178/image.png" width="400px" />
</blockquote>
</blockquote>
<h2 id="⚡-tps-transaction-per-second">⚡ TPS (Transaction Per Second)</h2>
<p>초당 전달할 수 있는 요청의 수를 의미한다.</p>
<p>1 Connection에서 10개의 transaction하며, 응답 사이즈는 1kb로 설정하여 받는다. 연결 후 전달하는 요청을 측정한다.</p>
<p><img src="https://velog.velcdn.com/images/tech_hama/post/67398388-9c3b-473a-a725-c989b4c5c675/image.png" alt=""></p>
<h2 id="⚡-throughput">⚡ Throughput</h2>
<p>1 Connection 10개의 transaction을 응답사이즈를 적절하게 혼합하여 처리량 트래픽을 만듦. (시험성적서 기준 응답 사이즈는 1KB (10%), 8KB(10%), 16KB(10%), 32KB(70%))
이는 실 환경을 고려한 혼합된 사이즈이다. 하지만 운영에서는 mix 된 사이즈는 실제를 기반으로 혼합하지만 구축된 웹과 차이가 있을 수 있다.</p>
<p><img src="https://velog.velcdn.com/images/tech_hama/post/aba2c1fb-58bc-4cb7-9ed5-d547d901e7d7/image.png" alt=""></p>
<blockquote>
<p>만약에 응답 사이즈가 1KB 일 경우 높은 throughput은 만들기 어렵다. 예를 들어 connection 당 10개 transaction이 있고, 이의 응답 사이즈가 1KB 이면 처리량은 10KB 이다. 해당 장비는 CPS가 최대치 10,000 이라고 가정하면, 처리량은 10KB * 10000 연결 = 100000KB = 100MB 이다. 해당 응답사이즈로 처리량 1GB을 요구 시 장비는 100,000의 CPS를 만들어야 한다. 그러므로 Transaction 당 응답 사이즈가 증가해야 Throughput이 증가가 가능하다. 처리량은 <strong><span style='background-color:#fff5b1'>CPS, TPS, 응답사이즈</span></strong>와 연관성이 있다.</p>
</blockquote>
<h2 id="⚡-ccconcurrent-connections">⚡ CC(Concurrent connections)</h2>
<p>세션을 끊지 않는 상태로 최대 세션을 맺을 수 있는 수를 측정
CC는 메모리의 용량에 비례하여 처리 가능</p>
<p><img src="https://velog.velcdn.com/images/tech_hama/post/1a9d0724-b1f8-4e6f-ab2a-c3b9a1232b1b/image.png" alt=""></p>
<p>그림은 전부 WAF의 Proxy 기준으로 작성하였으며, 프록시가 아닌 경우는 계측기 C ↔ WAF로 이해하여 생각하면 된다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[마크다운 사용법 (with. ChatGPT 3.5)]]></title>
            <link>https://velog.io/@tech_hama/%EB%A7%88%ED%81%AC%EB%8B%A4%EC%9A%B4-%EC%82%AC%EC%9A%A9%EB%B2%95-with.-ChatGPT-3.5</link>
            <guid>https://velog.io/@tech_hama/%EB%A7%88%ED%81%AC%EB%8B%A4%EC%9A%B4-%EC%82%AC%EC%9A%A9%EB%B2%95-with.-ChatGPT-3.5</guid>
            <pubDate>Wed, 06 Mar 2024 05:31:07 GMT</pubDate>
            <description><![CDATA[<p>velog를 쓰고 싶은데, 위의 메뉴 외에 더 잘 사용하고 싶다.
하지만 여기의 메뉴얼로는 부족하고, 개발자처럼 마크다운에 익숙하지 않으면 사용이 쉽지 않다. 그래서 ChatGPT 3.5를 활용해보았다. 만약에 기본을 알고 있다면, 마지막은 ChatGPT가 알려주지 않은 부분을 작성하였기에 마지막만 보셔도 좋습니다.
<br></p>
<hr>
<p><strong>마크다운</strong>은 텍스트 기반의 마크업 언어로, 2004년 존 그루버에 의해 만들어졌습니다. 이 언어는 쉽게 쓰고 읽을 수 있으며 HTML로 변환할 수 있습니다. 깃헙 저장소의 README.md와 같이 간결하게 설치 방법, 소스 코드 설명, 이슈 등을 기록하고 가독성을 높일 수 있습니다. 마크다운의 장단점은 다음과 같습니다:</p>
<blockquote>
<p><strong>장점</strong>:</p>
</blockquote>
<ol>
<li><strong>간결함</strong>: 간단한 구조의 문법을 사용하여 빠르게 컨텐츠를 작성할 수 있습니다.</li>
<li><strong>별도의 도구 없이 작성 가능</strong>: 특별한 도구 없이 텍스트로 작성할 수 있습니다.</li>
<li><strong>다양한 형태로 변환 가능</strong>: 다양한 형식으로 변환할 수 있어 유연하게 활용할 수 있습니다.</li>
<li><strong>용량이 적어 보관이 용이</strong>: 텍스트 파일로 저장되기 때문에 용량이 적습니다.</li>
<li><strong>버전 관리 가능</strong>: 텍스트 파일이므로 버전 관리 시스템을 이용하여 변경 이력을 관리할 수 있습니다.</li>
<li><strong>다양한 프로그램과 플랫폼 지원</strong>: 여러 프로그램과 플랫폼에서 사용할 수 있습니다.<br><blockquote>
<p><strong>단점</strong>:</p>
</blockquote>
</li>
<li><strong>표준이 없음</strong>: 표준이 없어 도구에 따라 변환 방식이나 생성물이 다를 수 있습니다.</li>
<li><strong>모든 HTML 마크업을 대신하지 못함</strong>: 모든 HTML 요소를 대체하지는 못합니다.</li>
</ol>
<hr>
<h1 id="사용법">사용법</h1>
<h2 id="1-제목">1. 제목</h2>
<blockquote>
</blockquote>
<h1 id="제목1">제목1</h1>
<h2 id="제목2">제목2</h2>
<h3 id="제목3">제목3</h3>
<h4 id="제목4">제목4</h4>
<pre><code>[mark down]

# 제목1
## 제목2
### 제목3
#### 제목4</code></pre><h2 id="2-항목">2. 항목</h2>
<blockquote>
<ol>
<li>순서가 있는 항목 1</li>
<li>순서가 있는 항목 3</li>
<li>순서가 있는 항목 5<ol>
<li>순서가 있는 소항목 1</li>
<li>순서가 있는 소항목 3</li>
<li>순서가 있는 소항목 5</li>
</ol>
</li>
</ol>
</blockquote>
<pre><code>[mark down]

1. 순서가 있는 항목 1
3. 순서가 있는 항목 3
5. 순서가 있는 항목 5
[tab] 1. 순서가 있는 소항목 1
      3. 순서가 있는 소항목 3
      5. 순서가 있는 소항목 5</code></pre><p>Auto-numbering 가능</p>
<h2 id="3-강조">3. 강조</h2>
<blockquote>
<p><em>이텔리체</em>
 ** 볼드 **</p>
</blockquote>
<pre><code>[mark down]
*이텔리체*
**볼드**</code></pre><h2 id="4-링크">4. 링크</h2>
<blockquote>
<p><a href="https://www.google.com">google</a></p>
</blockquote>
<pre><code>[mark down]
[google](https://www.google.com)</code></pre><h2 id="5-이미지">5. 이미지</h2>
<blockquote>
<p><img src="https://www.google.com/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png" alt="구글이미지"></p>
</blockquote>
<pre><code>[mark down]
![구글이미지](https://www.google.com/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png)</code></pre><h2 id="6-인용문">6. 인용문</h2>
<blockquote>
<p>인용문</p>
</blockquote>
<pre><code>[mark down]
&gt;인용문</code></pre><h2 id="7-코드">7. 코드</h2>
<blockquote>
<p><code>abc</code> inline code</p>
</blockquote>
<pre><code>code block</code></pre><pre><code>[mark down]
```abc``` inline code
\```
code block
\```</code></pre><h2 id="8-수평선">8. 수평선</h2>
<blockquote>
<hr>
</blockquote>
<pre><code>[mark down]
---</code></pre><h2 id="9-표">9. 표</h2>
<blockquote>
</blockquote>
<table>
<thead>
<tr>
<th>항목</th>
<th>값</th>
</tr>
</thead>
<tbody><tr>
<td>a</td>
<td>b</td>
</tr>
</tbody></table>
<pre><code>[mark down]
|항목|값
|---|---|
|a|b|</code></pre><h2 id="10-특수-문자">10. 특수 문자</h2>
<blockquote>
<p>```abc``` inline code not block</p>
</blockquote>
<pre><code>[mark down]
\```abc``` inline code not block</code></pre><hr>
<h2 id="chatgpt-35가-알려주지-않은-것들">ChatGPT 3.5가 알려주지 않은 것들</h2>
<ul>
<li>수평선은 --- 외에도 *** 도 가능하다.</li>
<li>줄 바꿈은 &lt;b&gt; 로 가능하다.</li>
<li>강조 이텔릭이나 고딕은 * 이 아닌 _ 로도 가능하다.</li>
<li>강조에서 취소선은 ~<del>취소문구</del> 사용한다.</li>
<li>인용은 &gt; 최대 3 depth를 만들 수 있다.</li>
<li>*, +, - 를 이용하여 마크다운의 순서가 없는 항목을 달리 만들 수 있다 (velog 불가)</li>
<li>이미지 태그를 이용하여 <code>&lt;img src=&quot;https://www.google.com/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png&quot; width=&quot;100px&quot; /&gt;</code> 사이즈 조절이 가능하다.</li>
<li>&lt; 이메일 주소 &gt; 로 이메일 링크가 가능하다.</li>
<li>code block의 경우 스페이스 4칸으로도 대체가 가능하다.</li>
<li>```[사용 언어 입력] 코드 블럭 ``` 시 syntax color 가 적용된다.</li>
<li>- [x] 입력 시 체크리스트가 작성된다. 반대는 -[ ] 이다.</li>
<li>표는 정렬이 가능하며, |:---| 왼쪽 정렬, |:---:| 오른쪽 정렬, |:---:| 가운데 정렬이다. 마크다운 표는 간단하게 마크다운으로 만들어주는 사이트도 존재한다. </li>
<li>색상을 입히는 법
  <span style="color:red">빨간색</span> <code>&lt;span style=&quot;color:red&quot;&gt;빨간색&lt;/span&gt;</code>
<span style="background-color:#fff5b1">노란색 형광</span> <code>&lt;span style=&quot;background-color:#fff5b1&quot;&gt;노란색 형광&lt;/span&gt;</code>
<span style="background-color:#dcffe4">초록색 형광</span> <code>&lt;span style=&quot;background-color:#dcffe4&quot;&gt;초록색 형광&lt;/span&gt;</code>
<span style="color:white; background-color:red">하이라이트빨강, 글자색 흰색</span> <code>&lt;span style=&quot;color:white; background-color:red&quot;&gt;하이라이트빨강, 글자색 흰색&lt;/span&gt;</code></li>
</ul>
]]></description>
        </item>
        <item>
            <title><![CDATA[계측기 Guide (I. neighborhood)]]></title>
            <link>https://velog.io/@tech_hama/%EA%B3%84%EC%B8%A1%EA%B8%B0-Guide-I.-neighborhood</link>
            <guid>https://velog.io/@tech_hama/%EA%B3%84%EC%B8%A1%EA%B8%B0-Guide-I.-neighborhood</guid>
            <pubDate>Mon, 04 Mar 2024 00:30:53 GMT</pubDate>
            <description><![CDATA[<p>계측기를 다루는 환경은 각기 다르다.
그러므로 제일 처음 <strong>[Control center] - [new neighborhood]</strong> 메뉴를 이용해서 계측기의 구성 환경을 만들어야 한다.</p>
<p><img src="https://velog.velcdn.com/images/tech_hama/post/813fb858-cec8-46c1-87bd-1dd434b6c505/image.png" alt=""></p>
<h2 id="what-type-of-device-are-you-testing">What type of device are you testing?</h2>
<p>Switch / router / Core router / NAT, Proxy / IPS / IPSec / LTE LPC / LTE MME / 3G packet core / Server / Custom</p>
<p>위의 구분으로 DUT의 환경 구성에 맞는 환경에 따라 생성한다</p>
<p>우선은 WAF의 계측기에 대한 프로파일 생성을 위해 <strong>NAT / Proxy</strong>를 클릭하고 <strong>create</strong> 를 생성</p>
<p>※ DUT 환경에 따라 모드 선택이 필요하다.</p>
<h2 id="start-up">Start-up</h2>
<p><img src="https://velog.velcdn.com/images/tech_hama/post/a01484e1-818a-4b20-9d28-c1346938cd36/image.png" alt=""></p>
<p>처음 생성되는 초기 값이다.
이제 테스트 환경에 따라 변경이 필요하며, 제일 먼저 해야할 것은 물리적인 Interface reserve이다. 우측 상단의 느낌표가 있는 <strong>Chassis</strong>를 클릭 한다.</p>
<p><img src="https://velog.velcdn.com/images/tech_hama/post/6ad9f4fd-6a16-464a-a822-02dbfdb433a6/image.png" alt=""></p>
<p>연결된 인터페이스를 클릭하면 열쇠 모습으로 잠기는 모습을 볼 수 있다.</p>
<p>reserve를 했다면 할당 된 포트를 확인이 필요하다.
현재 사용하고 있는 계측기 CloudStorm은 40G Interface * 4 가 있으며, 슬롯 당 Interface가 2개이다. 정보는 하단의 <strong>[Port Mapping]</strong>과 <strong>[Port Configuration]</strong>를 통해 확인하면 된다.</p>
<p><img src="https://velog.velcdn.com/images/tech_hama/post/8edaa184-e52e-4d05-b776-df62a4a22f0e/image.png" alt=""></p>
<p>여기서 주의할 점은 슬롯에 따라 인터페이스가 다를 수 있으며, In, Out에 대한 물리적 포트 연결도 주의해야 한다. 꼭 Port Mapping에서 reverve한 정보 확인이 필요하다. </p>
<p>만약에 DUT의 Interface의 종류가 다르다면 Port Configuration에서 변경 후 slot reboot이 필요하다.</p>
<h2 id="network-neighborhood-setting">Network Neighborhood setting</h2>
<p>이제 network 설정을 해주면 된다.</p>
<p><img src="https://velog.velcdn.com/images/tech_hama/post/bf6626f6-a422-480a-a380-5f9eeda35b2e/image.png" alt=""></p>
<p>항목 별 필요한 부분은 Add row로 추가를 하면 되며, 이 외 추가 항목은 <strong>[ADD NEW ELEMENT]</strong>로 추가를 하면 된다.</p>
<p><img src="https://velog.velcdn.com/images/tech_hama/post/8676040e-bcb2-489e-a586-98bd05242c4b/image.png" alt=""></p>
<p>위의 설정 값으로 <strong>Diagram Mode</strong> 확인 시 위와 같다.</p>
<p><img src="https://velog.velcdn.com/images/tech_hama/post/551d4a73-d651-429b-a6e7-51ea6f0c4ef2/image.png" alt=""></p>
<p>Neighborhood 는 위의 그림과 같이 설정을 했다.
시험 환경에 맞게 Network 대역대는 조정을 하면 된다.</p>
<p>사실 제일 기본적인 가이드이고, Network에 대한 지식도 필요하다. 하지만 기본이 되며, 이를 기준으로 각기 다른 시험 환경에 대해서 변경을 하면 된다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[계측기의 이상과 현실]]></title>
            <link>https://velog.io/@tech_hama/%EA%B3%84%EC%B8%A1%EA%B8%B0%EC%9D%98-%EC%9D%B4%EC%83%81%EA%B3%BC-%ED%98%84%EC%8B%A4</link>
            <guid>https://velog.io/@tech_hama/%EA%B3%84%EC%B8%A1%EA%B8%B0%EC%9D%98-%EC%9D%B4%EC%83%81%EA%B3%BC-%ED%98%84%EC%8B%A4</guid>
            <pubDate>Tue, 20 Feb 2024 01:14:21 GMT</pubDate>
            <description><![CDATA[<p>계측기를 사용하는 경우는 1)부하를 발생하여 측정해야할 경우와 2)제공하는 성능을 검증 시 사용을 한다.</p>
<p><em>계측기 : 사물을 검사할 때 쓰는 장비</em></p>
<p><img src="https://velog.velcdn.com/images/tech_hama/post/fe76cabe-9312-4c91-b7cf-e76812834848/image.png" alt=""></p>
<p>위의 표는 정부자원기술기준시험절차서의 웹방화벽 상세 내용이며, DUT(Device Under Test, 시험 대상 장비)는 <strong>기능 설정</strong>(파란색 네모)을 하며, 계측기는 <strong>제공 조건</strong>(빨간 네모)으로 설정하여 <strong>목표치</strong>(초록 네모)의 수치를 만든다. </p>
<blockquote>
<p>허용 실패 수치는 시험 조건에 따라 다를 수 있다</p>
</blockquote>
<p>보통 제품 도입 BMT에서 진행하는 계측은 여러가지 제조사의 동일 기준으로 비교함에 있으며, 이의 성능은 실제 망에서 사용 시 성능과 괴리가 있으며, 지표라고 생각하는게 맞다.</p>
<p>예를 들어 한 사람이 100m 트랙에서 10초의 기록을 갖고 있지만, 100m 일반 도로에서는 해당 기록이 안나올 수 있다.</p>
<p>위의 표를 기준으로 가급 장비는 응답 사이즈가 32Kb이며, 1 GET 일 때 10번의 Transaction 으로 조건의 HTTPS 1.5Gbps 이므로 실제 사이트에서 응답 사이즈가 이보다 작을 경우, 또는 암호화 알고리즘 보안 강도가 더 높은 경우, Transaction이 적은 경우 등 다양한 조건에 성능은 달라질 수 있다.</p>
<p>웹방화벽은 대표적으로 Ixia / Spirent 2가지의 계측기를 많이 사용하며, Keysight의 Breakpoint 부터 글을 작성해보려고 한다.</p>
<p><img src="https://velog.velcdn.com/images/tech_hama/post/846f7431-6231-41e0-9a78-ca4d8712c063/image.png" alt=""></p>
<p>Breakpoint는 제품 사양에 따라 perfectStorm(max 40G) / CloudStorm(max 100G) 으로 나뉜다.</p>
<p><img src="https://velog.velcdn.com/images/tech_hama/post/93fe30a2-ea88-46b4-926f-ef9b11c0de7a/image.png" alt=""></p>
]]></description>
        </item>
        <item>
            <title><![CDATA[HTTPS 복호화하는 세 가지 방법]]></title>
            <link>https://velog.io/@tech_hama/Wireshark-HTTPS-%EB%B3%B5%ED%98%B8%ED%99%94-%EC%84%B8-%EA%B0%80%EC%A7%80-%EB%B0%A9%EB%B2%95</link>
            <guid>https://velog.io/@tech_hama/Wireshark-HTTPS-%EB%B3%B5%ED%98%B8%ED%99%94-%EC%84%B8-%EA%B0%80%EC%A7%80-%EB%B0%A9%EB%B2%95</guid>
            <pubDate>Tue, 13 Feb 2024 05:50:06 GMT</pubDate>
            <description><![CDATA[<p>HTTP 프로토콜은 암호화가 되어있지 않으므로 보안이 취약하다. 
그래서 HTTPS로 안전하게 암호화를 한다. </p>
<p><img src="https://velog.velcdn.com/images/tech_hama/post/d0cd2714-f7a3-4869-8c52-7ab910444fc4/image.png" alt=""></p>
<p>w3techs.com에서 확인 된 24년 1월 웹사이트 HTTPS 사용 추이는 85.2%이며, 이는 한국에 국한되지 않는 글로벌 추이이다.</p>
<p>하지만 WEB에 대한 이해를 돕기 위해 우리는 복호화하여 내용을 볼 필요가 있다.
그래서 HTTPS 패킷을 복호화하는 3가지 방법을 소개하려고 한다.</p>
<h3 id="전체-flow">전체 Flow</h3>
<p><img src="https://velog.velcdn.com/images/tech_hama/post/2f5a6c50-effd-4bc4-bede-5c57378ce647/image.png" alt=""></p>
<p>우선 우리가 복호화의 방법을 알기 위해서는 HTTPS(RSA) 흐름을 인지할 필요가 있다.
<del>DH(Diffie–Hellman)에 대해서는 추가 보완 예정</del></p>
<h2 id="1-개인키-사용">1. 개인키 사용</h2>
<p>WEB 운영자가 아니라면 실제 개인키를 획득하기가 어렵다. 하지만 OpenSSL 을 적용해서 테스트를 한 경우라면 Private.key 를 획득은 쉽다.
<del>OpenSSL로 키를 발급 받는 방법도 긴 편이므로 나중에 적어보도록 한다.</del></p>
<p>우선 개인키를 획득했다면 Wireshark에 넣어주면 된다.
RSA Key list에서 주의할 점은 HTTPS이여도 Protocol은 <strong>HTTP</strong>로 기입을 해야한다.</p>
<p><img src="https://velog.velcdn.com/images/tech_hama/post/8d7bbee7-ea7c-4683-afb1-b87cf17373ec/image.png" alt=""></p>
<p>위와 같이 등록을 하면 열어진 상태에서는 reload 를 한다.</p>
<p><img src="https://velog.velcdn.com/images/tech_hama/post/46f72e65-10a4-4105-b557-35008499afeb/image.png" alt=""></p>
<p>하지만 복호화된 결과는 보여지지 않았다. 
이유는 암호화 프로토콜이 TLS 1.3으로 맺어졌고, TLS 1.3의 Cipher suite(보안 알고리즘)은 전부 DH(Diffie–Hellman)으로 개인키로 복호화가 불가하다.</p>
<p>웹 서버의 설정을 암호화 프로토콜은 <strong>TLS 1.2</strong>로 보안 알고리즘은 <strong>TLS_AES_256_GCM_SHA384</strong>으로 변경하여 RSA 키 교환 방식으로 변경하였다.</p>
<h4 id="rsa-key-list-적용">RSA key list 적용</h4>
<p><img src="https://velog.velcdn.com/images/tech_hama/post/335edddf-9fe3-4201-82f6-fff8c33c34bc/image.png" alt=""></p>
<h4 id="rsa-key-list-미적용">RSA key list 미적용</h4>
<p><img src="https://velog.velcdn.com/images/tech_hama/post/66721f9d-07e5-4d56-a970-291aa8d9fa75/image.png" alt=""></p>
<blockquote>
<p>실제로 테스트를 진행 시 보안 알고리즘 선택을 키 교환 방식을 RSA 임의의 알고리즘으로 적용 시 실패할 수 있다. 이는 브라우저에서 지원하는 보안 알고리즘의 리스트가 다르며 사용 브라우저와 버전에 따라 상이하다. <a href="https://www.ssllabs.com/">https://www.ssllabs.com/</a> [Test your browser] 를 이용하여 간편하게 확인이 가능하다.</p>
</blockquote>
<p><img src="https://velog.velcdn.com/images/tech_hama/post/a1a21502-c0bb-4b2a-9488-cd4182cf3a7c/image.png" alt=""></p>
<h3 id="복호화-방법--flow-이미지-중-⑧-개인키를-이용">복호화 방법 : Flow 이미지 중 ⑧ 개인키를 이용</h3>
<h2 id="2-proxy-toolburp-suite-사용">2. Proxy Tool(Burp suite) 사용</h2>
<p>대표적인 프록시 툴이다. 개인키의 등록이 아닌 신뢰할 수 있는 루트 인증 기관 인증서를 PC에 설치하는 방법이다.</p>
<ul>
<li>다운로드 사이트 <a href="https://portswigger.net/burp/communitydownload">https://portswigger.net/burp/communitydownload</a></li>
</ul>
<p><img src="https://velog.velcdn.com/images/tech_hama/post/566b4152-9abf-4e53-935f-1de47fed5ff9/image.png" alt=""></p>
<p><img src="https://velog.velcdn.com/images/tech_hama/post/3aa19074-553d-48a3-8523-47ebb3d9afc8/image.png" alt=""></p>
<p>위와 같이 PortSwigger 인증서를 루트 인증서에 설치 시 완료
브라우저는 burp suite 자체 Proxy 탭의 Open browser에서 이용해야 한다.</p>
<p><img src="https://velog.velcdn.com/images/tech_hama/post/2647bf8b-0bae-4f55-8da8-b31541036a9b/image.png" alt=""></p>
<p>Intercept on 타이밍은 변조 직전에 On으로 활성화를 해야하며, Intercept 중에는 브라우저 페이지가 넘어가지 않는다.</p>
<p><img src="https://velog.velcdn.com/images/tech_hama/post/74f4a279-4e77-4994-a6a3-71f2ca9cc521/image.png" alt=""></p>
<p>하지만 이 또한 보안알고리즘의 <strong>키 교환방식이 DH(Diffie–Hellman)인 경우 제한</strong>이 있다.</p>
<h4 id="dh-알고리즘-사용-시불가-화면">DH 알고리즘 사용 시불가 화면</h4>
<p><img src="https://velog.velcdn.com/images/tech_hama/post/f75e3ebf-a103-4366-9288-73c000b8e144/image.png" alt=""></p>
<h3 id="복호화-방법--flow-이미지-중-⑥을-이용">복호화 방법 : Flow 이미지 중 ⑥을 이용</h3>
<blockquote>
<p>시연을 위해서 서버의 보안 알고리즘을 변경 함</p>
</blockquote>
<h2 id="3-pre-master-scret-키를-사용">3. Pre-master-scret 키를 사용</h2>
<p><strong>[Window 가이드]</strong>
<img src="https://velog.velcdn.com/images/tech_hama/post/74792a0b-40ec-4b77-ae33-64c6ee9c057f/image.png" alt=""></p>
<p>윈도우 키를 누른 후에 &#39;환경 변수&#39; 를 입력하여 &#39;시스템 속성&#39;을 열어준다</p>
<p><img src="https://velog.velcdn.com/images/tech_hama/post/809820eb-29b1-4996-8fbd-844051e1f1a6/image.png" alt=""></p>
<p>변수 이름은 <strong>&#39;SSLKEYLOGFILE&#39;</strong> 로 생성하고, 변수 값은 <strong>폴더 위치를 포함한 파일 이름</strong>까지 설정한다.</p>
<p><strong>[주의]</strong> 윈도우 관리자 권한으로 자동으로 폴더를 생성하지 않으므로, 지정한 폴더의 생성이 필요하다.
<strong>[주의]</strong> 생성이 안되는 경우 재시작 후 브라우저를 열어서 확인이 필요하다.</p>
<p><img src="https://velog.velcdn.com/images/tech_hama/post/e7957ddc-1bf1-45be-ae47-88937406292a/image.png" alt=""></p>
<p>위와 같이 키가 생긴다면, wireshark 설정에서 아래와 같이 설정한다.
<img src="https://velog.velcdn.com/images/tech_hama/post/c2058151-897e-4312-9add-2d5bf4e85c52/image.png" alt=""></p>
<p>기존의 test1.pcap 의 Pre-master-scret 키가 있어 설정 후 다시 패킷을 불러왔다.</p>
<p><img src="https://velog.velcdn.com/images/tech_hama/post/9e42aa0f-d2cd-4455-9b96-3615d5589792/image.png" alt=""></p>
<p>해당 방법이 완벽할 것 같지만, 몇 가지 제한점이 있다.
OS 환경 변수를 사용하였기에, <strong>변수가 설정 된 OS 브라우저</strong>를 사용해야한다는 점이다. 
(Jmeter나 Postman 같은 Tool 사용 시 Pre-master-scret 키가 생성되지 않으므로 복호화 불가)</p>
<h3 id="복호화-방법--flow-이미지-중-⑨을-이용">복호화 방법 : Flow 이미지 중 ⑨을 이용</h3>
<p>이제 HTTPS 를 복호화한 값을 보도록하자.
HTTP/2의 경우 DH(Diffie–Hellman)을 이용하므로 3번째 방법을 꼭 진행해야 한다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[Window size 대한 이해]]></title>
            <link>https://velog.io/@tech_hama/Window-size-%EB%8C%80%ED%95%9C-%EC%9D%B4%ED%95%B4</link>
            <guid>https://velog.io/@tech_hama/Window-size-%EB%8C%80%ED%95%9C-%EC%9D%B4%ED%95%B4</guid>
            <pubDate>Thu, 08 Feb 2024 04:38:50 GMT</pubDate>
            <description><![CDATA[<p>Network Part가 아닌 Web에 대한 Part를 다룰 예정이므로 자세한 부분은 제외했으며, 이해를 돕기 위한 흐름으로 작성했다.</p>
<p>HTTP 2.0을 이해하기 앞서서 Window size에 대한 사전 이해가 필요하다.
여기서 Window size는 OS가 아니다. TCP Window size는 데이터의 양 또는 버퍼의 크기라고 이해를 하면 쉽다.</p>
<h2 id="window-size">Window size</h2>
<p>TCP(Transmission Control Protocol, 전송 제어 프로토콜)은 연결 이후 데이터와 패킷의 신뢰성을 보장한다.</p>
<p><img src="https://velog.velcdn.com/images/tech_hama/post/bad481cd-0bd9-4871-ab6c-59c598a2923b/image.png" alt=""></p>
<p>데이터의 전달할 수 있는 크기는 Window size이며 16bytes(2^16 = 65536, 0-65535, 65535 bytes)의 크기를 갖는다.</p>
<p>데이터를 전달하는 방법은 아래와 같다.
전달한 패킷의 응답이 올 경우 다음 패킷을 전달할 수 있다.
<strong>(Stop and wait)</strong></p>
<p>좀 더 효율적인 방법도 있다. 3-handshake 후 송신측의 window size와 송신한 window size 값을 계산하여 공간이 부족할 경우에는 송신을 중단하고, 수신 공간이 생기면 TCP Header의 Window Field로 송신측에 알린다. <strong>(sliding windows)</strong></p>
<p>이를 일반적으로 Flow control, 흐름제어라고 한다.</p>
<p><img src="https://velog.velcdn.com/images/tech_hama/post/24e84c03-2883-459d-bbdf-fdfe5e498894/image.png" alt=""></p>
<p>TCP Stream 23번의 경우 최초의 패킷은 Window size value 값을 64240을 <strong>송신측</strong>이 전달하고 동일한 값을 <strong>수신측</strong>이 받았다.</p>
<blockquote>
<p>Window size 65535가 아닌 이유는 일반적으로 MTU 1500일 경우 IP Heaer 20bytes와 TCP Headers 20bytes를 제외한 1460 MSS(Maximum segement size, TCP segmenet의 최대 데이터 양)을 갖는다. 일반적인 경우 65535 / 1460 = 44.886... 이므로 기본적인 값으로 44 * 1460 = 64240의 window size를 전달한다.</p>
</blockquote>
<p>만약에 window size가 작다면 어떻게 될까? 매우 비효율적일 것이다.
그러면 많이 보내면 효율적일까? 
하지만 보낼 수 있는 <strong>송신자</strong> 의 보낼 수 있는 Resource와 받을 수 있는 <strong>수신자</strong> 의 받을 수 있는 Resource는 한정적이며 각기 다르므로 고정할 수는 없다.</p>
<blockquote>
<p>DoS 공격중에 Slowread가 있다. Slowread Attack은 window size를 고의적으로 작게보내어 리소스를 소모하는 공격이다.</p>
</blockquote>
<h2 id="window-scale">Window scale</h2>
<p>이론적으로 위의 학습을 기반으로 계산해보자.
<strong><em>RTT(Round Trip Time)이 20ms, Window size 65535 bytes 일 경우</em></strong></p>
<p>bps는 bit per second이므로 Bandwidth는 byte * 8 / ms 의 수식으로 계산할 수 있다.</p>
<ul>
<li>byte → bit, ms → sec 변환 : 65535 * 8  / 0.02 (sec) = 524280 bit / 0.02 sec</li>
<li>0.02 sec → sec 변환 : 524280 * 50 / sec = 26241000 bit / sec</li>
<li>단위 변환 : 25599kbps → 24Mbps </li>
</ul>
<p>고작 처리량이 24Mbps 뿐이 안나온다. 이는 현대의 속도로는 엄청나게 느린 속도이다. 그래서 Window Scale을 사용한다. 
Window scale이 8일 경우 2^8 256배율을 갖는다.
고로 높은 속도를 위해서는 Window scale가 필요하다.</p>
]]></description>
        </item>
    </channel>
</rss>