# **CyberSecurity** ###### tags: `CyberSecurity`,`OSC` :::success ### Table of Content [TOC] ::: ### 基礎密碼學 #### 要件 - **機密性(Confidentiality)** > 確保訊息只有被授權者才能取得 - **完整性(Integrity)** > 偵測訊息是否遭受竄改 - **身分認證(Authentication)** > 傳送方與接受方需驗證識別 - **不可否認性(Non-Reputation)** > 提供訊息傳送方與接受方的交易證明 #### 分類 - **對稱式加密(Symmetric Encryption)** - 傳送方與接收方的加解密皆使用同一把密鑰 > 這把密鑰同時擁有加密&解密兩種功能 - 優點:簡單、方便 - 缺點:不安全 > 密鑰在第一次傳送時,被中間人攔截且複製,再原封不動傳給接收方,那之後所有攔截到的加密訊息,都能被輕易破解 ![](https://i.imgur.com/nzRzAtd.png) - **非對稱式加密(Asymmetric Encryption)** - 非對稱式加密就是使用者都擁有一對密鑰:公開金鑰(Public key)及私密金鑰(Private key),加密解密過程中必須是完整一對的(pair) > 公鑰:能被廣泛的發佈與流傳 > 密鑰:必須被妥善的保存 - 傳送方與接收方在傳送之前,先把公鑰傳給對方,當傳送方要傳送時,就用接收方的公鑰將訊息加密,接收方收到加密訊息後,再用自己的密鑰解開,因此第三方無法讀去加密後的訊息 - Double Confirm:數位簽章(Digital Signature) > - 傳送方除了使用接收方的公鑰加密外,也使用自己的私鑰對該封加密訊息的Hash簽名 > - 類似於現實生活中的蓋手印(? > - 這樣除了加、解密外,有確認傳送方身分的機制 ![](https://i.imgur.com/XnZS2be.png) #### References - [密碼學](https://zh.wikipedia.org/wiki/密码学) - [對稱式加密](https://zh.wikipedia.org/wiki/對稱密鑰加密) - [非對稱式加密](https://zh.wikipedia.org/wiki/公开密钥加密) - [數位簽章](https://zh.wikipedia.org/wiki/數位簽章) ### 編碼 #### Morse code - 時通時斷的訊號代碼 - 組成 - 點(·):1 - 劃(-):111 - 字元內部的停頓(在點和劃之間):0 - 字元之間的停頓:000 - 單詞之間的停頓:0000000 - 對照表: - Alphabet ![](https://i.imgur.com/CM62zXc.png) - Number ![](https://i.imgur.com/M1LEsGK.png) - Symbol ![](https://i.imgur.com/EHT1FI8.png) #### ASCII - 基於拉丁字母的一套電腦編碼系統,主要用於顯示現代英語 - 組成 - 數字(0~127) - 分類/對照表 - 控制字元 - 代表數字:0~31、127 ![](https://i.imgur.com/AYC62i5.png) ![](https://i.imgur.com/96svwZA.png) - 顯示字元 - 代表數字:32~126 ![](https://i.imgur.com/KZR5JMy.png) ![](https://i.imgur.com/l7e3sGH.png) #### Big5 - 繁體中文中最常用的電腦漢字字元集標準 - 分類 ![](https://i.imgur.com/j3rKPSP.png) - 查碼表 - [click here](http://web.tnu.edu.tw/me/study/moodle/tutor/vb6/tutor/r05/index.htm) #### UTF-8 - 一種針對Unicode的可變長度字元編碼,也是一種字首碼,是全球資訊網的最主要的編碼形式,因而成為XML檔案和HTML檔案的預設編碼方式 - 分類 ![](https://i.imgur.com/59gSX71.png) #### References ### 演算法 #### RSA - Design By: - 羅納德·李維斯特(**R**on Rivest) - 阿迪·薩莫爾(**A**di Shamir) - 倫納德·阿德曼(**L**eonard Adleman) - Info: - 非對稱式加密演算法 - 在公開金鑰加密和電子商業中被廣泛使用 - 極大整數做因數分解的難度決定了 RSA 演算法的可靠性(對一極大整數做因數分解愈困難,RSA 演算法愈可靠) - 攻與防: - 攻: - 短的 RSA 鑰匙 - 快速因數分解的演算法 - 量子電腦(? - 防: - 只要其鑰匙的長度足夠長,用RSA加密的訊息實際上是不能被破解的 - Operation - 公/私鑰產生: 1.隨意選擇兩個大的質數 **p** 和 **q** , 計算 **N** > - **p ≠ q** > > - ![](https://i.imgur.com/mNeRb1x.png) 2.根據歐拉函數,求得 **r** > - ![](https://i.imgur.com/SNfUiJV.png) 3.選擇一個小於 **r** 的整數 **e** , 並求得 **e** 關於 **r** 的模反元素 **d** (, 模反元素存在,若且唯若 e 與 r 互質) > - **e** 與 **r** 互質 > > - 令 ![](https://i.imgur.com/lNXclKY.png) 4.將 p 和 q 的記錄銷毀 > - **( N , e )** 是公鑰 , **( N , d )** 是私鑰 > > - 愛麗絲將她的公鑰傳給鮑伯,而將她的私鑰藏起來 - 加密訊息: 假設鮑伯想給愛麗絲送一個訊息 **m** ,他知道愛麗絲產生的 **N** 和 **e** 。他使用起先與愛麗絲約好的格式將 **m** 轉換為一個小於 **N** 的非負整數 **n** ,比如他可以將每一個字轉換為這個字的`Unicode碼`,然後將這些數字連在一起組成一個數字。假如他的訊息非常長的話,他可以將這個訊息分為幾段,然後將每一段轉換為 **n** 。 ![](https://i.imgur.com/KDLeRi5.png) 鮑伯算出 **c** 後就可以將它遞移給愛麗絲就可以傳訊息給愛麗絲了 - 解密訊息 愛麗絲得到鮑伯的訊息 **c** 後就可以利用她的私鑰 **d** 來解碼 ![](https://i.imgur.com/r5tZBGh.png) 接著將訊息 **m** 還原 ![](https://i.imgur.com/ZJoBM2H.png) 已知 ![](https://i.imgur.com/8mxpBOJ.png) ,即 ![](https://i.imgur.com/IAhAmBd.png) ![](https://i.imgur.com/24BA704.png) - 若 **n** 與 **N** 互質,則由歐拉定理得 ![](https://i.imgur.com/DPq1IaJ.png) - 若 **n** 與 **N** 不互質,則不失一般性考慮 ![](https://i.imgur.com/B6QBEC7.png) 及 ![](https://i.imgur.com/akY22Nc.png) ![](https://i.imgur.com/O0553Bn.png) ![](https://i.imgur.com/js5O7ro.png) > 得證 ![](https://i.imgur.com/bq7qAAD.png) - 概念圖 ![](https://i.imgur.com/4r58k6x.png) #### ROT13 - Info - 一種簡易的替換式密碼 , 常被論壇用來規避系統文字檢查 - 常常被當作弱加密範例的典型 - Operations: - 僅僅只需要檢查字元字母順序並取代它在13位之後的對應字母 , 超過時則重新繞回26英文字母開頭即可 - 對照表 ![](https://i.imgur.com/5xihZ8j.png) - 簡單範例程式 (C++) ```cpp= #include<bits/stdc++.h> #define orz ios::sync_with_stdio(0),cin.tie(0),cout.tie(0) #define ll long long using namespace std; signed main(){ orz; string input; ll len,x; while(getline(cin,input)){ len=input.size(); for(x=0;x!=len;x++){ if(isalpha(input[x])){ if(input[x]>='a'&&input[x]<='z'){ cout<<char(int(input[x]-'a'-12)>0?input[x]-13:input[x]+13); } else{ cout<<char(int(input[x]-'A'-12)>0?input[x]-13:input[x]+13); } } else{ cout<<input[x]; } } cout<<'\n'; } } ``` #### Vigenère cipher - Design by: - 最早記錄是吉奧萬·巴蒂斯塔·貝拉索( Giovan Battista Bellaso)發明的,但被誤傳是法國外交官布萊斯·德·維吉尼亞(Blaise De Vigenère)所創造,因此命名為維吉尼亞密碼 - Info: - 使用一系列凱撒密碼組成密碼字母表的加密算法,屬於多表密碼的一種簡單形式 - 簡單易用,有點難被破解 - Element: - 明文:原始訊息 - 密鑰:加密元素 - 密文:加密訊息 - Operations: - 想法1:查表對照法 1. 加密:依序將明文及密鑰依序列做對照、查表 2. 解密:步驟相反(查表後對照密鑰及明文) ![](https://i.imgur.com/6Z5TaEw.png) - 想法2:數學邏輯法 - 用數字0-25代替字母A-Z , 以同餘的形式完成加/解密 1. 加密: ![](https://i.imgur.com/82u5V0h.png) 2. 解密: ![](https://i.imgur.com/fyvKhf5.png) #### References - [RSA algorithm](https://en.wikipedia.org/wiki/RSA_(cryptosystem)) - [ROT13](https://en.wikipedia.org/wiki/ROT13) - [Vigenère ciphe](https://en.wikipedia.org/wiki/Vigen%C3%A8re_cipher)