題目:
同學A--
- 產生akey(私)及apub(公)
- 產生a.txt(12345678)
- 將a.txt以RSA加密傳給同學B(檔名ax.txt),須先取得同學B的公key-bpub
- 產生a.txt的簽章a.sign並傳給同學B,使用自身私key akey簽章
同學B--
- 產生bkey(私)及bpub(公)
- 接收ax.txt 並解密成a.txt,並解密成a.txt,使用自身私key bkey解開
- 接收a.sign解出筆對黨(ay.txt),比對a.txt及ay.txt決定a.txt傳送者(須取得同學A的公key,apub做verify)
------------------------------
解答:
A--
步驟2---openssl rsautl -in a.txt -out ax.txt -inkey bpub -pubin -encrypt
步驟3---openssl rsautl -in a.txt -out a.sign -inkey akey -sign
其他步驟略
B--
步驟2---openssl rsautl -in ax.txt -out a.txt -inkey bkey -pubin -decrypt
步驟3---openssl rsautl -in a.sign -out ay.txt -inkey apub -pubin -verify
其他步驟略
----------完整指令與教學----------------
聽完一整天的密碼學,似乎很多人搞不懂講什麼東西,我當初大學也學得很沒起勁呢(笑)。密碼學說穿了就是搞心機罷了,因此大學的時候心機重的這門課學得比較好(笑*2)。開始探討RSA吧!
先講一下對稱式跟公鑰是什麼?我們可以想像成對稱式是摩斯密碼傳送的軍機,公鑰是需要鎖匙的藏寶箱;
拿 二次大戰來聊那個什麼德軍使用DES,透過某個規則把文字語言變成另一種不懂的文字語言傳送,也就是兩邊只要一個懂演算法的翻譯家就好了(感覺到字面的意 思嗎?對稱式很搭配這句話吧)。但是如果途中有一個間諜偷了這份軍機,他只要想辦法猜到這是哪國語言在去找翻譯家就破解了,所以很方便但是有可能被破解。
而 公鎖像把這份軍機放入寶箱上鎖內寄給對方,中間間諜看到根本不知道裡面裝什麼,需要鎖匙才能知道,當然鎖匙要怎麼寄送就是一個問題了,既然談到寶箱我們引 用到RSA算了。去買一組鎖頭與鎖匙,把沒封上的鎖頭寄給對方,要求對方把文件放到寶箱內並上鎖寄給你,你到時候再用鎖匙打開就好了,這就是公key跟私 key原理,很簡單吧又有點耍心機。
正式公佈解題--------
遊戲規則是這樣的,我與山凱大大進行了雙角色扮演互傳,所以這裡我的檔案為loki.txt(有副檔名)山凱的檔案為message(無副檔名),我的檔案可以用windows開啟而他的檔案只能用cmd的type開啟,後面可以看到。執行cmd進入DOS模式吧:
C:\Documents and Settings\student>d: //請先做好環境變數再來打這三行……
D:\>cd openssl\work //如果問這三行為什麼要這樣打
D:\openssl\work>openssl //只是為了方便檔案會建立在work下
OpenSSL> genrsa -out ikey.pem -des -passout pass:12345 2048 //我先創造一個私key,名為ikey.pem,密碼為12345,key長度為2048
Loading 'screen' into random state - done
Generating RSA private key, 2048 bit long modulus
................................................................................
.....+++
...............+++
e is 65537 (0x10001) //沒error字眼應該成功了,懶的理他寫什麼
OpenSSL> rsa -in ikey.pem -out ipub.pem –pubout //再從私key(ikey.pem)裡面把公key給撈出來,名為ipub.pem
Enter pass phrase for ikey.pem: //教你輸入密碼,我剛設12345
writing RSA key
OpenSSL> rsautl -in loki.txt -out i.sign -inkey ikey.pem –sign //再來建立你的數位簽章,你可以拿個可以象徵你的圖片當作私人印章,我是懶的做所以把loki.txt當作我的頭顱代表傳過去了。用私key鎖
Loading 'screen' into random state - done
Enter pass phrase for ikey.pem: //又要輸入密碼12345
//都做好一切準備了,你手上有公私key各一個,還有一個機密文件與代表數位簽章的頭顱
//這時候,透過網芳之類的把你的公key交給對方。對方也要這樣做,等你拿到對方的公key(鎖頭)就快點拿來加密上鎖寶箱吧。
OpenSSL> rsautl -in loki.txt -out lokij.txt -inkey apub -pubin –encrypt //拿對方的公key對你的機密文件來上鎖寶箱
Loading 'screen' into random state – done
//這個時候把這個寶箱lokij.txt送給對方,對方也送一個寶箱amessage給我了,對方寶箱上有你的鎖頭
OpenSSL> rsautl -in amessage -out message -inkey ikey.pem –decrypt //我不知道原本檔名是啥,所以隨便取message,使用你自己的子key解開
Loading 'screen' into random state - done
Enter pass phrase for ikey.pem: //跟自己的子key有關,又是解我的密碼12345
OpenSSL> exit //離開程式回到目錄上去
D:\openssl\work>type message //檢查一下內文
Hello.
Today is September 24.
Tomorrow is Friday.
Weekend is coming.
Yeah!!
That is all. //耶,看到內容了
//再來是數位簽章,把加密過的數位簽章給對方,對方也把他的給你,這時候回想一下你在數位簽章上用私key鎖的,相反的需要公key解開,這時候還要跟對方討公key。
D:\openssl\work>openssl //再回到程式去
OpenSSL> rsautl -in asign -out message1 -inkey apub -pubin –verify //這時候拿對方的公key解開
Loading 'screen' into random state - done
OpenSSL> exit
D:\openssl\work>type message1
This is Kenny.
Nice to meet you.//一樣成功。
D:\openssl\work>
結論:
傳送者-A:
需準備[公A-key]、[私A-key]、[數位簽章A]、[欲傳送的明文M]
發送前要擁有[公B-key]
對方要傭有自己的[私A-key]
[公B-key]+ [欲傳送的明文M]=狗大便,送給他
[私A-key]+ [自己的數位簽章A]=鳥大便,送給他
傳送者-b:
需準備[公B-key]、[私B-key]
發送前要擁有[私A-key]
狗大便+[私B-key]= [欲傳送的明文M]
鳥大便+[公A-key] = [數位簽章A]
留言
張貼留言
留言請注意禮節與尊重他人,良好的交流環境需要你我共同維護。
VtigerCRM 相關留言討論,請改至FaceBook社團申請加入使用
https://www.facebook.com/groups/vTigerCRMtoTaiwan/