張貼日期:2025/03/14
李家同
現在我們的檔案往往存放在雲端,替我們存放的公司為了安全起見,常常將檔案做成好幾份,放在不同地方的伺服器中。萬一有一架伺服器出了問題,其他的檔案仍然是沒有問題的。這種儲存檔案的方法叫做分散式檔案儲存。
在雲端的檔案當然是要加密的,加密的好處是要防止駭客偷看。如果各份檔案的加密方法是一樣的,駭客只要破解任何一份就可以了。
我要在此介紹我國的一家雲端公司,他們對分散式檔案儲存的加密是不同的。假設檔案有三份,每份加密的方法不同,解密的人必須將這三份加密的檔案聯合在一起,再用同一個解密的方法來恢復原始資料。
首先,我們要知道,不論什麼檔案,在電腦中都是一連串的0和1,如01001001110000101000
我們取一段0與1來加密,假設每一次取8個位元,我們要加密的字串是1000011,我們將這個二進位數字轉換成十進位數字135,一個二進位數字如果有8個位元,則對應的最小十進位數字是0,最大的十進位數字是2^8-1=256-1=255。我們先取一個比255大的,最小的質數,它是257。
假設我們將檔案放在2個地方,我們加密的方法是將我們加密的數字轉變成兩個數字,轉變的公式如下:
y_1=(a+bx_1 )modC
y_2=(a+bx_2 )modC
其中a是我們要加密的十進位數字,C是大於2^n-1的最小質數。以我們的例子而言,a=135,C=257,至於b,x_1和x_2都是加密者選的。我們假設加密者選了以下的數字:
B=57
x_1=5
x_2=3
我們的加密公式是
y_1=(a+bx_1 )modC=(135+57(5))mod(257)
y_2=(a+bx_2 )modC=(135+57(3))mod(257)
所以
y_1=(135+285)mod(257)=(420)mod(257)=163
y_2=(135+171)mod(257)=(306)mod(257)=49
163=(10100011)_2
49=(00110001)_2
因此原來的1000011,現在變成了2個,10100011和00110001。
加密者將a和b都丟掉,同時將x_1=5和x_2=3藏起來。如果要解密,就解以下的兩個方程式:
163=a+b(x_1 )mod257
49=a+b(x_2 )mod257
因為x_1=5,x_2=3,所以我們的聯立方程式是
163=a+5b mod257……(1)
49=a+3b mod257……(2)
解以上的方程式可以用以下的公式
a=(y_2 x_1-y_1 x_2)/(x_1-x_2 )mod257……(3)
各位可以試一下
a=(49(5)-163(3))/(5-3)mod257……(1)
=(245-489)/2mod257
=(-244)/2mod257
=-122 mod257
=135
這是正確的答案。
從以上的討論,我們可以得知解密並不難,但是駭客想解密,必須先有以下的資料:
(1)檔案一共有多少拷貝
(2)這幾份拷貝放在哪裡
(3)每次加密的位元數
假設駭客已得到了以上的資訊,他仍需解一組聯立方程式。如果以以上的例子來看,他要解以下的聯立方程式:
163=a+b(x_1 )mod257
49=a+b(x_2 )mod257
他並不知道x_1和x_2,因此猜x_1和x_2各有256個可能的數字,所以駭客要解65536組聯立方程式。
如果這麼多的聯立方程式只有一組正整數解,駭客就已經解密了。但是根據銘傳大學徐熊健教授所做的實驗,a的答案有256個之多,所以對於駭客而言,他等於沒有做任何事。
如果檔案有三個拷貝,就要解3個聯立方程式:
y_1=a_1+a_2 (x_1 )+a_3 (x_1)^2
y_2=a_1+a_2 (x_2 )+a_3 (x_2)^2
y_3=a_1+a_2 (x_3 )+a_3 (x_3)^2
a1可以用Lagrange interpolating polynomial來解。
這個加密方法是由Shamir所提出的,Shamir是演算法大師之一。我國這家雲端公司的主持人也是學演算法的。大家可以看出演算法對資訊安全的重要性,希望資訊系的同學們都能精通演算法,而演算法又和數學是有密切關係的。
政府一再強調資安,我希望政府和企業界都應該知道,資料絕對需要加密的,好的加密方法,可以使駭客知難而退的。