創作內容

40 GP

利用 XOR 對資料加密的原理淺談

作者:解凍豬腳│2015-09-01 04:04:24│巴幣:88│人氣:6005

ㄤ骯

最近各種懶惰,

決定來發個延續上次那篇 什麼是布林代數?邏輯閘又是啥? 的文章。
(靠,這樣就過一年了喔

不知道大家還記不記得邏輯閘是什麼呢?來複習一下:

我們先前提到,對於 "AND" 這個邏輯閘來說,
(註:「X AND Y」用符號可以記為「X.Y」)

如果 "AND" 運算子左邊的東西成立,右邊也成立的話,那麼這整個式子就成立。

用口語來說的話,「我有姊姊,也有妹妹」這件事情,

我們可以寫成: ( 我有姊姊 AND 我有妹妹 )

這時候倘若左邊「我有姊姊」是成立的(1),右邊「我有妹妹」也是成立的(1)

那麼「我有姊姊 AND 我有妹妹」這件事情就是成立的(1)對吧?
(1 AND 1) = 1

反之如果我有姊姊(1),但是我沒有妹妹(0)

那麼「我有姊姊 AND 我有妹妹」這件事情就會是錯的(0),沒問題吧?
(1 AND 0) = 0

因此我們將 AND 的邏輯運算歸納出(1是成立,0是不成立)

1 AND 1 = 1
1 AND 0 = 0
0 AND 1 = 0
0 AND 0 = 0

這個就是 AND 邏輯閘的運算,我想應該是再簡單不過的了。

實際上,那些研究電子元件的科學家,為了因應各個不同情況的需求,

在這些東西的發展過程中,慢慢分別研究並定義出了:

NOT 、 OR 、 AND 、 NAND 、 NOR 、 XOR 、 XNOR……等等的邏輯閘,

其中我們剛剛提到的 AND 就是讓電腦來判斷「是不是兩件事情都成立」的幫手。

當然,聰明的人就會發現:

「那,OR 這個邏輯閘是不是用來讓電腦判斷『兩件事情是否有至少一件成立』的呢?」

沒錯!"OR" 這個邏輯閘就是被拿來作這樣的用途,

也因此大家可以猜得到,OR 邏輯閘會有這樣的性質:

1 OR 1 = 1
1 OR 0 = 1
0 OR 1 = 1
0 OR 0 = 0

那麼,今天我們來談談邏輯閘裡面的 XOR 運算吧~~

XOR 這個邏輯運算子相對於 AND 及 OR 兩種邏輯閘來說,算是比較特別的一種,

它主要被用來當作「檢查兩個數值的『成立狀態』是不是一樣」的幫手:

1 XOR 1 = 0
1 XOR 0 = 1
0 XOR 1 = 1
0 XOR 0 = 0

如果左邊的東西跟右邊的東西一樣,那就會得出 0 ;

但如果兩邊只有剛好其中一個條件成立的話,那就會得出 1。



後來隨著邏輯閘這種東西的發展,科學家讓這東西的用途慢慢延伸,

使得邏輯閘不再只能對最簡單的 1 跟 0 去作運算,

而是連那些比 1 還要大的數字也能參與運算——

但是,電腦只能認得出 0 跟 1,所以電腦仍然要基於 0 跟 1 的系統達成這件事。



譬如 182 這個數字,我們把它轉換成二進位會得到:

182 = ( 1 0 1 1 0 1 1 0 )

再隨便挑另外一個數字來舉例……假設我們挑 99 好了。

99 轉換成二進位會得到:

99 = ( 0 1 1 0 0 0 1 1 )

這時候,我們讓電腦計算「182 AND 99」這個玩意吧!

如何計算呢?我們把它寫成直式,並且每一位個別依照 AND 的性質作計算會得到:

1 0 1 1 0 1 1 0
AND 0 1 1 0 0 0 1 1
= 0 0 1 0 0 0 1 0

也就是說,

( 1 0 1 1 0 1 1 0 ) AND ( 0 1 1 0 0 0 1 1 ) = ( 0 0 1 0 0 0 1 0 )

我們把剛剛的計算結果轉換成十進位(我們平常的數字系統)會得到

( 0 0 1 0 0 0 1 0 ) =  34

也就是說,我們可以寫成 182 AND 99 = 34

聽起來很奇怪、你們一定會覺得豬腳我在嚎洨你們吧

不信你們可以打開電腦裡面的小算盤,調為「程式設計師」模式

接著算算看 182 AND 99 ,能發現按了等號會得出 34

其實,計算機裡面 "AND" 按鈕的實際運算過程,就是這麼算的

當然,我們剛剛提到的 XOR 對於數字的運算也同理,

每一位個別依照 XOR 的定義作計算:

57 XOR 42 = (00111001) XOR (00101010) = (00010011) = 19



後來,科學家不斷研究 XOR 這個邏輯閘,想知道它到底能不能有什麼用處,

發現到 XOR 這個東西居然會有這樣的性質:

( A XOR B ) XOR B = A

MAGIC!這個就好像我手上有一段原文 A,然後我拿一把鑰匙 B,

讓 A 對 B 進行 XOR 運算以後會得到加密過的數據 C,

這時候再把加密過的數據 C 對鑰匙 B 進行 XOR 運算,又可以得到原來的 A。

這看起來沒什麼,但在密碼學家的眼中可是一個大發現!



註:以下文章將出現大量數字,請小心脫窗!

我們以下會用藍色代表「原文」紫色代表「密碼」橘色代表「加密過的原文」



回歸正題。

舉例來說,我們依照自己喜好做編碼(我只挑前面 16 個字母比較好舉例):

A=0 B=1 C=2 D=3 E=4 F=5 G=6 H=7
I=8 J=9 K=10 L=11 M=12 N=13 O=14 P=15

接著,假設我們手上有需要加密的資料內容是 "BANANA"

對照編碼的表,資料內容轉換為數字變成 [ 1, 0, 13, 0, 13, 0 ]

寫成二進位就是 (0001), (0000), (1101), (0000), (1101), (0000)

那如果我們拿了一把鑰匙內容是 "MON"

我們可以把 MON 對照上面的編碼表得出 M=12, O=14, N=13

也就是 MON = (1100), (1110), (1101)

這時候我們就可以拿來利用 "MON""BANANA" 加密了!

怎麼做?跟剛剛一樣,不過因為 "MON" 的字符長度太短,跟 "BANANA" 不一樣

所以我們把密碼改成 "MONMON" 這樣就可以跟 "BANANA" 做 XOR 運算了:

B A N A N A
XOR M O N M O N

當然用英文字母我們不能直接算,那就對照編碼表並改成二進位再做計算:

0001 0000 1101 0000 1101 0000
XOR 1100 1110 1101 1100 1110 1101
= 1101 1110 0000 1100 0011 1101

得到 [ 1, 0, 13, 0, 13, 0 ] XOR [ 12, 14, 13, 12, 14, 13 ] = [ 13, 14, 0, 12, 3, 13 ]

也就是 "BANANA" XOR "MONMON" = "NOAMDN"

當然如果我們要再把「加密過的原文」(簡稱密文)給還原回來

就會需要用正確、一樣的鑰匙(密碼),才能得到正確的原文

1101 1110 0000 1100 0011 1101
XOR 1100 1110 1101 1100 1110 1101
= 0001 0000 1101 0000 1101 0000

以上的直式代表 [ 13, 14, 0, 12, 3, 13 ] XOR [ 12, 14, 13, 12, 14, 13 ] = [ 1, 0, 13, 0, 13, 0 ]

也就是 "NOAMDN" XOR "MONMON" = "BANANA" , 原文就這麼出來了~



當然,這裡如果我們把密文 "NOAMDN"錯誤的鑰匙(密碼)來做計算

譬如我們嘗試拿 "LAG"(因為長度要一樣,所以改成"LAGLAG"

當作鑰匙來試圖解開 "NOAMDN" 這個密文,就會發生以下情況:

"LAGLAG" 對照編碼:[ 11, 0, 6, 11, 0, 6 ]

然後改寫成二進位:(1011), (0000), (0110), (1011), (0000), (0110)

列成直式計算 "NOAMDN" XOR "LAGLAG"

1101 1110 0000 1100 0011 1101
XOR 1011 0000 0110 1011 0000 0110
= 0110 1110 0110 0111 0011 1011

得到的結果是 (0110), (1110), (0110), (0111), (0011), (1011)

改成十進位是:[ 6, 14, 6, 7, 3, 11 ]

回顧一下剛剛的編碼表:

A=0 B=1 C=2 D=3 E=4 F=5 G=6 H=7
I=8 J=9 K=10 L=11 M=12 N=13 O=14 P=15

對照回來會發現得到的結果內容居然是 "GOGHDL",而不是我們想要的 "BANANA" !

也就是說,這代表如果我們善加利用 ( A XOR B ) XOR B = A 的性質,就可以視為:

「原文 XOR 密碼 = 密文」,而且「密文 XOR 密碼 = 原文」的性質就會存在;

但我們如果是「密文 XOR 錯誤的密碼」就會得到「不正確的原文」,

就好像我們一定要拿一樣的鑰匙,才能把寶箱打開一樣。

對此,因為原理很容易理解,又可以利用它達到一定的加密安全強度,

因此許多電腦資料的加密算法依賴於「XOR」這個邏輯閘,

密碼學家也對於這種「一個同樣的鑰匙,可以做到加密也可以做到解密」的加密算法,

稱為「對稱金鑰加密」;當然其他依賴不同性質進行加密的,就稱為「非對稱金鑰加密」。



除此之外,當然如果每一筆資料都用不同的密碼來進行加密,

那麼安全強度就會高出許多,因為這樣就比較不容易被破解。

這裡我想各位會有很大的疑問:為什麼用一樣的密碼進行加密會很容易被破解?

豬腳就在這裡舉個例子吧:

假設我們有 "BANANA"、"CANADA"、"MIDADC" 這三筆資料,

密碼全都是用 "MONMON" 來進行加密

(下面兩筆我懶得一個一個算了,我用XXXXXX和YYYYYY來代替):

"BANANA" XOR "MONMON" = "NOAMDN"
"CANADA" XOR "MONMON" = "XXXXXX"
"MIDADC" XOR "MONMON" = "YYYYYY"

假設以上這三筆是加密的過程。

毫無疑問地,密文是公開的、大家都能看得見的內容(不然怎麼傳送資料呢?)

那麼,如果有駭客經由其他手段,好不容易偷取到其中一筆原文 "BANANA",

而且這名駭客得知 "BANANA" 是 "NOAMDN" 的原文,

他就能列出以下的關係(問號是未知,XXXXXX 和 YYYYYY 是已知):

"BANANA" XOR ??? = "NOAMDN"
??? XOR ??? = "XXXXXX"
??? XOR ??? = "YYYYYY"

這樣他就可以利用 XOR 的運算性質

將 "NOAMDN" XOR "BANANA" 得到密鑰是 "MONMON"

(XOR的運算性質:若 A XOR B = C,那麼 C XOR A = B 會成立)

接著推論出關係:

"BANANA" XOR "MONMON" = "NOAMDN"
??? XOR ??? = "XXXXXX"
??? XOR ??? = "YYYYYY"

倘若不巧,今天這個負責加密的那一端全都用 "MONMON" 來加密的話

這名駭客就可以拿 "MONMON" 來解密其他密文 "XXXXXX" 和 "YYYYYY"

如此,他便能利用一把同樣的金鑰來得取其他原文,並且輕鬆列出:

「"BANANA" XOR "MONMON" = "NOAMDN"

"CANADA" XOR "MONMON" = "XXXXXX"

"MIDADC" XOR "MONMON" = "YYYYYY"」的相互關係。

這個方法,在駭客眼裡就稱為「明文攻擊」。

因此,大家都需要一個安全、簡單又可靠的加密方式,

之後便發展出了 RC4、RC5、RC6、DES、AES、3DES 等等的加密標準,

來讓 XOR 的運算性質得以發揮效用,這就是 XOR 在資料加密方面的應用以及隱憂。



話說到這裡,我以前對於壓縮檔的加密方式一直很好奇,但是卻沒有研究

其實我原先一直以為是這樣:

「正確的密碼會藏在 zip/rar 檔案裡的某個地方,

等到使用者輸入密碼、點選確定的時候,rar 的程式會核對密碼是否正確,

接著才決定要不要把壓縮檔裡面的內容給解壓出來。」

但等到我研究了一些常見的加密標準算法以後,才知道這是完完全全錯誤的概念。

也因此,網路上絕對不可能存在「可以繞過壓縮檔的密碼而直接解壓縮的工具」,

那個絕對都是跟你嚎洨的,因為裡面的資料早就藉由密碼跟固定的算法給大洗牌了,

只有暴力破解(把所有可能的密碼組合都拿來試)才有機會把壓縮檔給破解——

而且暴力破解的速度非常慢……用超級電腦才「有機會」在你有生之年破解大型資料。

今天對於加密的部分就上到這裡,下課~



 
引用網址:https://home.gamer.com.tw/TrackBack.php?sn=2949476
All rights reserved. 版權所有,保留一切權利

相關創作

留言共 27 篇留言


度ㄉ 我以前也以為密碼會藏在某個檔案內 結果翻遍都沒有

09-01 04:08

解凍豬腳
年輕的我真是好傻好天真R[e16]09-01 04:09
2B王
直接拉下點GP

09-01 04:09

解凍豬腳
謝謝,但我比較希望大家可以好好吸收豬腳散播的知識[e16]09-01 04:10
呆皮的同學
又會畫圖又博學 豬腳真是太狂啦

09-01 04:14

解凍豬腳
啊啊 稱不上博學啦[e16]09-01 20:08
2B王
你散播ㄉ愛窩接受ㄌ 阿斯 但4窩只看得懂前半段[e36]

09-01 04:30

解凍豬腳
畢竟 脫窗[e16]09-01 20:09
コーティカルテ
原來互斥或是醬實用的,感人

09-01 06:19

解凍豬腳
度ㄉ 我寫文章寫到快脫窗了09-01 20:09
咖啡寶逼我食(¯―¯٥)
ㄇㄉ
之前在學校上這個都聽不懂
現在看一看就懂了[e2]

還有
打那麼多辛苦了
沒想到巴哈還藏有這種高人[e5]

09-01 07:04

解凍豬腳
加密這種東西 很好玩的[e16]09-01 20:09
萬里磁鐵貓
通知

09-01 09:18

解凍豬腳
通知回送[e16]09-01 20:09
八冰綠好喝
幾個月前才在學這些東西

不過真的不是說很懂

看起來要好好學一下了

09-01 13:30

解凍豬腳
很簡單沒錯
但前期的確會需要多花一點時間才可以理解[e18]09-01 20:10
雪之王女‧F‧巧可奈
看到快頭暈了@@

09-01 13:31

解凍豬腳
我也快脫窗了[e16]09-01 20:10
漁夫OwO
看的有點暈,先推
是說學校好像之後會教邏輯...[e13]

09-01 17:16

解凍豬腳
Good game[e16]09-01 20:10
藍貓
寫得很好^^

09-01 19:55

解凍豬腳
謝謝~~[e16]09-01 20:10
Foya (教父)
太神啦,完全看不懂

09-01 20:16

解凍豬腳
程式設計的世界很黑暗[e36]09-01 20:18
佚名
資工王你好!

09-01 20:19

解凍豬腳
不敢當、不敢當...[e16]09-01 20:20
黑糖
前陣子看到的vigenere cipher
跟這相較起來,就真的是玩具了[e29]

09-01 20:26

解凍豬腳
沒錯
基本上凱薩加密法系列的破譯方法
常常會有人利用單字/字母出現頻率(譬如THE、E、A等等)來進行分析
所以盡量還是使用現在最常見的加密標準比較可靠[e1]09-01 20:32
使徒
我高一資訊新生 學長好

09-01 21:08

解凍豬腳
學、學長……?[e17]
豬腳的性別是豬腳[e16]09-01 21:14
亞洲最霸氣統粉
感覺你好像在婊ptt某名人ㄏㄏ

09-01 21:12

解凍豬腳
靠,這樣也被你發現[e16]09-01 21:14
飛天吉娃娃
博學的豬腳 ,我也是高一的心生 學長早

09-01 21:20

解凍豬腳
[e16]09-01 23:27
解凍豬腳
高中很好玩09-01 23:28
爪孟爪
太猛了
不過看不懂 嗚嗚

09-03 00:08

解凍豬腳
只要記得科學家對我們的貢獻重大就好[e16]09-03 00:18
刀起頭落
下拉太多了!

09-03 22:41

解凍豬腳
畢竟 脫窗[e16]09-03 22:44
蘿莉賽高
豬腳你資工的? 酷
我還以為你只是畫圖的好手
失敬了

09-04 10:11

解凍豬腳
其實我還沒上大學[e16]09-04 16:06
兩津研發鯉魚王
長知識ㄌ
豬腳越來越專業了!

09-06 22:53

解凍豬腳
謝謝[e16]09-06 23:36
freedom
XOR這東西的觀念不只會用在資料安全上 , 他能應用的領域蠻廣的說 , 在電子電路上也是很被廣泛的應用的 , 今天看到數位羅及能被這樣運用在資安上也著實讓我上了一課 ! 精華收藏[e5]

02-27 01:14


雖然現在說有點晚了 但是57XOR42應該是15
通過小算盤算的結果是15 特意算了兩遍

09-01 00:59

解凍豬腳
耶?!我按出來是 19 沒錯呀09-01 01:02
解凍豬腳
我的 19 是指十進位的 19 唷09-01 01:03
解凍豬腳
0x57 XOR 0x42 = 0x15 這樣就是正確的了09-01 01:03

不知道怎麼樓中樓回復,就再回復一次
我也不知道,我按出來結果是15...
在你回復之前我是沒有自己算過啦
後來自己算確實是19
所以小算盤是怎麼一回事[e10]

09-01 01:16

解凍豬腳
因為你不小心選到 HEX(十六進位)模式了
十六進位的 57 = 十進位的 87
十六進位的 42 = 十進位的 66
十六進位的 15 = 十進位的 21

我們人類平時在使用的數字系統是十進位
也就是:1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 ...

但是電腦資料為了方便檢閱,會用十六進位
也就是:1, 2, 3, ..., 8, 9, A, B, C, D, E, F, 10, 11 ...09-01 01:19
解凍豬腳
我原文介紹的 57 XOR 42
是指十進位的 57 和十進位的 42
並不是十六進位的 57 和十六進位的 4209-01 01:20

其實我是看到這篇文章才知道Win10有小算盤的存在
之前都是windows附屬應用程式底下就找的到
一時沒找到所以一直以為win10沒有
第一次用沒注意到原來左邊還有一排 謝謝解答啦[e7]

09-01 01:23

miniya755
感謝你 最近剛好遇到一個XOR的加密 碰到瓶頸 看了你這篇後 我懂了很多

12-24 14:56

哥布林鎖鍊旋轉者
太優質了

02-26 00:16

我要留言提醒:您尚未登入,請先登入再留言

40喜歡★johnny860726 可決定是否刪除您的留言,請勿發表違反站規文字。

前一篇:盜圖就是他媽的該檢舉啦... 後一篇:喔喔!豬腳要上大學啦!...

追蹤私訊切換新版閱覽

作品資料夾

------------------ (0)

豬腳生活 (1)
日常雜談、巴哈大小事 (193)
煞氣a國中生 (7)
高中生活日誌 (55)
大學生活日誌 (34)
冬令營回憶錄 (19)
也許藏有一些小祕密吧? (3)
各式各樣的開箱文 (11)
貓科動物時間 (15)

------------------ (0)

繪圖創作 (1)
電繪插圖、草稿 (199)
短篇漫畫、單幅標語 (61)
上課太無聊的手繪塗鴉 (8)
不知道該怎麼分類的綜合作品 (18)

文字創作 (1)
草莓兵的國軍紀實 (14)
我與らい的點點滴滴 (12)
那些榮耀的時刻與心跳加速的瞬間 (60)
有感而發的隨筆之作、無法分類的短文 (17)

------------------ (0)

語言學習 (1)
日語:天気がいいから (5)
粵語:唔好再淨係識講粗口喇 (6)
英語:Hey, you! (1)

程式設計及電腦網路 (1)
系列文:跟著豬腳 C 起來 (10)
系列文:論壇網站運作原理 (3)
Go(Golang) (11)
Ruby / RGSS (7)
Visual Basic (13)
JavaScript (1)
各種原理 (17)

思想:多思考一下,世界會更不一樣 (1)
網路經驗、社會觀察 (23)
檸檬庫 (21)

數學:我來拯救你的期中考了 (1)
各類基礎觀念 (5)
國中生也能懂的微積分 (9)
微分方程 (0)

小說:用筆鋒劃出新世界的入口 (1)

繪圖:我也想畫出私巴拉西的美圖 (10)

------------------ (0)

施工中 (22)

不堪回首的痕跡、雜物堆放 (31)

------------------ (0)

未分類 (1)

Wannablesu晚上好
看更多我要大聲說昨天22:04


face基於日前微軟官方表示 Internet Explorer 不再支援新的網路標準,可能無法使用新的應用程式來呈現網站內容,在瀏覽器支援度及網站安全性的雙重考量下,為了讓巴友們有更好的使用體驗,巴哈姆特即將於 2019年9月2日 停止支援 Internet Explorer 瀏覽器的頁面呈現和功能。
屆時建議您使用下述瀏覽器來瀏覽巴哈姆特:
。Google Chrome(推薦)
。Mozilla Firefox
。Microsoft Edge(Windows10以上的作業系統版本才可使用)

face我們了解您不想看到廣告的心情⋯ 若您願意支持巴哈姆特永續經營,請將 gamer.com.tw 加入廣告阻擋工具的白名單中,謝謝 !【教學】