<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>yeon_sun.log</title>
        <link>https://velog.io/</link>
        <description></description>
        <lastBuildDate>Tue, 30 Nov 2021 14:58:04 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <image>
            <title>yeon_sun.log</title>
            <url>https://images.velog.io/images/yeon_sun/profile/835afe6a-9fc0-45d2-9e5f-fe84e5ce73ea/social.png</url>
            <link>https://velog.io/</link>
        </image>
        <copyright>Copyright (C) 2019. yeon_sun.log. All rights reserved.</copyright>
        <atom:link href="https://v2.velog.io/rss/yeon_sun" rel="self" type="application/rss+xml"/>
        <item>
            <title><![CDATA[[정보보호와시스템보안] CSIC 2010 Dataset]]></title>
            <link>https://velog.io/@yeon_sun/%EC%A0%95%EB%B3%B4%EB%B3%B4%ED%98%B8%EC%99%80%EC%8B%9C%EC%8A%A4%ED%85%9C%EB%B3%B4%EC%95%88CSIC-2010-Dataset</link>
            <guid>https://velog.io/@yeon_sun/%EC%A0%95%EB%B3%B4%EB%B3%B4%ED%98%B8%EC%99%80%EC%8B%9C%EC%8A%A4%ED%85%9C%EB%B3%B4%EC%95%88CSIC-2010-Dataset</guid>
            <pubDate>Tue, 30 Nov 2021 14:58:04 GMT</pubDate>
            <description><![CDATA[<h3 id="http-dataset-csic-2010">HTTP DATASET CSIC 2010</h3>
<pre><code>HTTP DATASET CSIC 2010에는 자동으로 생성된 수천 개의 웹 요청이 포함되어 있습니다. 
웹 공격 방지 시스템 테스트에 사용할 수 있습니다. CSIC의 정보 보안 연구소에서 개발되었습니다.</code></pre><p>출처 - <a href="https://www.tic.itefi.csic.es/dataset/">https://www.tic.itefi.csic.es/dataset/</a></p>
<hr>
<h3 id="머신러닝-알고리즘">머신러닝 알고리즘</h3>
<pre><code>머신러닝은 지도 학습(Supervised Learning), 비지도 학습(Unsupervised Learning), 
강화 학습(Reinforcement Learning)으로 구분됩니다.

그 중 지도 학습과 비지도 학습의 차이점은 학습 결과에 대한 사전 지식의 존재 유무입니다. 
지도 학습은 학습 결과에 대한 사전 지식이 존재하므로 분류(classification)와 회귀(regression)가 가능하고, 
비지도 학습은 학습 결과에 대한 사전 지식이 존재하지 않으므로 비슷한 데이터들을 군집화 하여 결과를 예측합니다.  </code></pre><p>이번 프로젝트에서 활용한 지도 학습의 알고리즘은 다음과 같습니다.</p>
<ol>
<li><p><strong>Logistic Regression(로지스틱 회귀)</strong></p>
<p> 로지스틱 회귀의 목적은 일반적인 회귀 분석의 목표와 동일하게 종속 변수와 독립 변수간의 관계를 구체적인 함수로 나타내어 향후 예측 모델에 사용하는 것입니다.</p>
<p> 하지만 로지스틱 회귀는 선형 회귀 분석과는 다르게 종속 변수가 범주형 데이터를 대상으로 하며 입력 데이터가 주어졌을 때 해당 데이터의 결과가 특정 분류로 나뉘기 때문에 일종의 분류 (classification) 기법으로도 볼 수 있습니다.</p>
</li>
<li><p><strong>Decision Tree(결정 트리)</strong></p>
<p> 결정 트리는 데이터를 분석해서 데이터 사이에 존재하는 패턴을 예측 가능한 규칙의 조합으로 나타내는 것입니다. 결정 트리는 분류와 회귀 모두 가능합니다. 즉, 범주나 연속형 수치 모두 예측할 수 있습니다.</p>
</li>
<li><p><strong>Random forests(랜덤 포레스트)</strong></p>
<p> 랜덤 포레스트는 훈련 과정에서 구성한 다수의 결정 트리로부터 부류(분류) 또는 평균 예측치(회귀 분석)를 출력합니다.</p>
</li>
<li><p><strong>LightGBM(Gradient Boosting Machine, 점진적 부스팅 머신)</strong></p>
<p> LightGBM은 일반적인 균형 트리 분할 방식(Level Wise)과 다르게 리프 중심 트리 분할 방식(Leaf Wise)을 이용합니다. 이 방법은 트리의 균형을 맞추지 않고 최대 손실 값(max delta loss)을 가지는 리프 노드를 지속적으로 분할하면서 트리가 깊어지고 비대칭 적인 트리를 만듭니다. </p>
<p> 하지만 이 방법으로 트리를 계속해서 분할하게 되면 균형 트리 분할 방식보다 예측 오류 손실을 최소화할 수 있습니다.</p>
<p> Light GBM은 말 그대로 가볍고 속도가 빠르다는 장점이 있습니다. Light GBM은 큰 사이즈의 데이터를 다룰 수 있고 실행시킬 때 적은 메모리를 차지합니다.</p>
</li>
<li><p><strong>SVM(Support Vector Machine, 서포트 벡터 머신)</strong></p>
<p> SVM은 주어진 데이터 집합을 바탕으로 하여 새로운 데이터가 어느 카테고리에 속할지 판단하는 비확률적 이진 선형 분류 모델을 만듭니다. 만들어진 분류 모델은 데이터가 사상된 공간에서 경계로 표현되는데 그 중 가장 큰 폭을 가진 경계를 찾는 알고리즘입니다.</p>
</li>
<li><p><strong>SGD(Stochastic Gradient Descent, 확률적 경사 하강법)</strong></p>
<p> 확률적 경사 하강법은 추출된 데이터 한개에 대해서 gradient를 계산하고 경사 하강 알고리즘을 적용하는 방법입니다. 전체 데이터를 사용하는 것이 아닌 랜덤하게 추출한 일부 데이터만을 사용하므로 학습 중간 과정에서 결과의 진폭이 크고 불안정하고 속도가 매우 빠르다. 또한, 데이터를 하나씩 처리하기 때문에 오차율이 크고 GPU의 성능을 모두 활용하지 못합니다. </p>
</li>
</ol>
<hr>
<h3 id="용어-정리">용어 정리</h3>
<ul>
<li>Accuracy(정확도) - 올바르게 예측된 데이터의 수를 전체 데이터의 수로 나눈 값</li>
<li>F1 Score - precision과 recall의 조화평균<ul>
<li>Precision(정밀도) - 모델이 True로 예측한 데이터 중 실제로 True인 데이터의 수</li>
<li>Recall(재현율) - 실제로 True인 데이터를 모델이 True라고 인식한 데이터의 수</li>
</ul>
</li>
</ul>
<hr>
]]></description>
        </item>
        <item>
            <title><![CDATA[[Python] 각 자리 수의 합]]></title>
            <link>https://velog.io/@yeon_sun/Python-%EA%B0%81-%EC%9E%90%EB%A6%AC-%EC%88%98%EC%9D%98-%ED%95%A9</link>
            <guid>https://velog.io/@yeon_sun/Python-%EA%B0%81-%EC%9E%90%EB%A6%AC-%EC%88%98%EC%9D%98-%ED%95%A9</guid>
            <pubDate>Fri, 08 Oct 2021 19:49:47 GMT</pubDate>
            <description><![CDATA[<p>입력받은 숫자의 각 자리 수를 더한 결과를 리턴하는 문제이다.</p>
<p>첫번째 방법은 다음과 같다.</p>
<pre><code>def solution(num):
    answer = 0
    while num &gt; 0:
        answer += num % 10
        num //= 10
    return answer</code></pre><p>answer에 num을 10으로 나눈 나머지를 더하는 과정을 num을 10으로 나눈 몫이 0보다 클 동안 반복한다.</p>
<p>두번째 방법은 다음과 같다.</p>
<pre><code>def solution(num):
    return sum([int(i) for i in str(num)])</code></pre><p>int num을 string으로 변환하고 한 자리씩 다시 int로 list에 저장한다.
그리고 sum()을 사용해서 list에 있는 원소를 모두 더한다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[[보안프로토콜] 단일치환암호의 치환표를 찾고, 평문으로 복호화하기]]></title>
            <link>https://velog.io/@yeon_sun/%EB%B3%B4%EC%95%88%ED%94%84%EB%A1%9C%ED%86%A0%EC%BD%9C-%EB%8B%A8%EC%9D%BC%EC%B9%98%ED%99%98%EC%95%94%ED%98%B8%EC%9D%98-%EC%B9%98%ED%99%98%ED%91%9C%EB%A5%BC-%EC%B0%BE%EA%B3%A0-%ED%8F%89%EB%AC%B8%EC%9C%BC%EB%A1%9C-%EB%B3%B5%ED%98%B8%ED%99%94%ED%95%98%EA%B8%B0</link>
            <guid>https://velog.io/@yeon_sun/%EB%B3%B4%EC%95%88%ED%94%84%EB%A1%9C%ED%86%A0%EC%BD%9C-%EB%8B%A8%EC%9D%BC%EC%B9%98%ED%99%98%EC%95%94%ED%98%B8%EC%9D%98-%EC%B9%98%ED%99%98%ED%91%9C%EB%A5%BC-%EC%B0%BE%EA%B3%A0-%ED%8F%89%EB%AC%B8%EC%9C%BC%EB%A1%9C-%EB%B3%B5%ED%98%B8%ED%99%94%ED%95%98%EA%B8%B0</guid>
            <pubDate>Tue, 05 Oct 2021 12:48:04 GMT</pubDate>
            <description><![CDATA[<h3 id="단일치환암호란">단일치환암호란?</h3>
<blockquote>
<p>단일치환암호는 &#39;단일문자치환암호&#39;라고도 하며, 항상 문자에 대해서는 같은 문자로 치환하는 방식이다. 예를 들어, 앞서 A를 H로 치환했다면 하나의 키를 통해 암호화된 문서에서 나타나는 모든 H는 평문의 A가 된다.</p>
</blockquote>
<p>출처 - 해시넷 위키</p>
<h3 id="암호문의-알파벳-빈도수-분석하기">암호문의 알파벳 빈도수 분석하기</h3>
<h4 id="1-substitution-ciper-tool-사이트-사용하기">1. &#39;Substitution ciper tool&#39; 사이트 사용하기</h4>
<blockquote>
<p><a href="http://www.chaos.org.uk/~eddy/craft/substitute.html">http://www.chaos.org.uk/~eddy/craft/substitute.html</a></p>
</blockquote>
<p>위 사이트에 접속하여 text area에 단일치환암호로 암호화된 암호문을 입력하면 해당 암호문의 알파벳 및 특수문자, 숫자의 빈도수를 계산하고 빈도수가 높은 순서로 정렬해서 알려준다.</p>
<h4 id="2-코드-작성하기python">2. 코드 작성하기(Python)</h4>
<p>전체 코드는 다음과 같다.</p>
<pre><code>filename = &#39;ciphertext.txt&#39; // 원하는 파일명 사용

with open(filename, &#39;r&#39;, encoding=&#39;utf-8&#39;) as data:
    ct = data.read()
ct_msg = ct.upper()

Alphabet = &#39;ABCDEFGHIJKLMNOPQRSTUVWXYZ&#39;

ct_freq = {}

for i in range(0, 26):
    ct_freq[Alphabet[i]] = 0

for ch in ct_msg:
    if ch in Alphabet:
        idx = Alphabet.find(ch)
        ct_freq[Alphabet[idx]] += 1

ct_freq_sort = sorted(ct_freq.items(), key=(lambda x:x[1]), reverse=True)

for key, value in ct_freq_sort:
    print(key, &quot; : &quot;, value) // key는 알파벳, value는 빈도수
</code></pre><p>암호문을 txt 파일에 작성하고 위 코드를 실행시키면 해당 암호문의 알파벳 빈도수를 계산해서 빈도수가 높은 순서로 정렬하여 출력한다.</p>
<h3 id="치환표-찾고-평문으로-복호화하기">치환표 찾고 평문으로 복호화하기</h3>
<h4 id="빈도수-분석-결과와-일반적인-알파벳-출현-빈도-분석표-비교하기">빈도수 분석 결과와 일반적인 알파벳 출현 빈도 분석표 비교하기</h4>
<p>일반적인 알파벳 출현 빈도는 다음과 같다.
<img src="https://images.velog.io/images/yeon_sun/post/c9701dc4-315c-4507-b6e4-5eecb1988e1e/image.png" alt=""></p>
<p>암호문의 알파벳 빈도수와 일반적으로 사용되는 알파벳의 빈도수를 비교한 후 알고 있는 영
어 단어 및 문법을 활용하여 변환한다.</p>
<p>예시는 다음과 같다.</p>
<blockquote>
<ol>
<li>암호문의 최빈도를 갖는 문자 i를 e로 변환한다.</li>
<li>자주 나오는 opi(i는 e로 변환)를 관사 the로 추정하여 변환한다.</li>
<li>혼자 사용되는 b는 관사 a로 추정하여 변환한다.
...</li>
</ol>
</blockquote>
<p>복호화한 평문의 알파벳 빈도수를 분석한다.</p>
<pre><code>filename = &#39;plaintext.txt&#39; // 원하는 파일명 사용

with open(filename, &#39;r&#39;, encoding=&#39;utf-8&#39;) as data:
    pt = data.read()
pt_msg = pt.upper()

Alphabet = &#39;ABCDEFGHIJKLMNOPQRSTUVWXYZ&#39;

pt_freq = {}

for i in range(0, 26):
    pt_freq[Alphabet[i]] = 0

for ch in pt_msg:
    if ch in Alphabet:
        idx = Alphabet.find(ch)
        pt_freq[Alphabet[idx]] += 1

pt_freq_sort = sorted(pt_freq.items(), key=(lambda x:x[1]), reverse=True)

for key, value in pt_freq_sort:
    print(key, &quot; : &quot;, value)</code></pre><p>복호화한 평문의 알파벳 빈도수를 분석하여 암호문의 알파벳 빈도수를 통해 치환표를 출력한다.</p>
<pre><code>print(&quot;암호문 -&gt; 평문&quot;)
for ct_key, ct_value in ct_freq_sort:
    for pt_key, pt_value in pt_freq_sort:
        if ct_value == pt_value:
            print(&quot;   &quot;, ct_key, &quot; -&gt; &quot;, pt_key)</code></pre><h3 id="느낀-점">느낀 점</h3>
<p>단일치환암호의 암호문을 입력하자마자 해당 암호문을 복호화 시켜주는 코드를 작성하고 싶었지만 고려해야 할 사항과 시간적 제약이 있어서 완성하지 못했다. 나중에 시간이 된다면 마무리하고 싶다.</p>
]]></description>
        </item>
        <item>
            <title><![CDATA[자기소개]]></title>
            <link>https://velog.io/@yeon_sun/%EC%9E%90%EA%B8%B0%EC%86%8C%EA%B0%9C</link>
            <guid>https://velog.io/@yeon_sun/%EC%9E%90%EA%B8%B0%EC%86%8C%EA%B0%9C</guid>
            <pubDate>Sun, 08 Aug 2021 13:58:54 GMT</pubDate>
            <description><![CDATA[<p>안녕하세요 2021 윙크 부회장 백연선입니다</p>
]]></description>
        </item>
    </channel>
</rss>