標籤:

如何在公開情況下進行私密通訊?

如何在公開交流的情況下進行私密通訊?

比如#無秘#,你發的任何任何信息所有人都能看到,兩個互不了解但是有意向的人如何能夠進行只有他們兩個人知道的通訊?在現有規則下,請排除開發私聊功能。

================================================

首先謝謝各位的熱情回答,可能我說的不是很清楚,各位的解答都有個前提,就是雙方要提前知道加密或者解密的演算法,或者擁有相應的密匙。

但是我想問的是,在一個公開的環境下,每個人都能看到所有人的信息,有意向的雙方還沒有建立相關的加密解密機制,雙方該用什麼方法進行私密通訊,或者建立這樣一個加解密機制?


看到問題描述樓主應該是個初學者,沒必要上來就上各種數學符號,各種演算法名稱嘛。其實很簡單的。有種演算法能利用兩種密碼,一種密碼能加密,一種密碼能解密。這兩種密碼不能一樣。我在我的名片上印上加密密碼和加密演算法,你就用名片上的方法給我發信息就行了,我偷偷的用解密密鑰解密。當然我不會讓你通過加密密鑰猜出解密密鑰出來,不能讓別人知道解密密鑰。


很簡單啊,看圖:

對稱密鑰加密需要雙方有共同秘密,而我們可以用「顏料混合」來實現一次在不安全信道上的秘密交換:雙方先選擇一個公開的普通顏料,然後分別倒入自己的「秘密顏色」得到兩個混合顏料(第三行),交換之後再倒入自己的「秘密顏色」,就能得到兩罐相同的、秘密的顏色了。而竊密者即使獲得了交換過程里的混合顏料,他也很難將之拆分,推算出兩個人的「秘密顏色」。

這就是 Diffie-Hellman 密鑰交換……


text = D ( C ( text ) ) 要求 D, C 兩個函數不能互推,C公開,D只有自己知道。

比如甲乙通信,收信人乙保留D,然後把 C 公開,那麼發信人甲發送 C(text) , 就只有擁有 D 函數的才能解密知道 text 值是什麼了。

當然有可能攻擊者丙劫持了信道,發了個 C(text2) 給,這叫中間人攻擊

為了防止中間人攻擊,通信雙方各生產一對函數,比如C1, D1, C2, D2, D1隻有甲自己知道,D2隻有乙自己知道,C1, C2公開。

甲發送 cipher = C2 ( D1 ( text ) ) 出去,收到後 D2 ( C1 ( cipher ) ) , 就能得到 text了。

當然攻擊者也可以劫持公鑰分發(就是甲乙互相讓對方知道C1,C2)過程。。。這個就是數字證書要解決的問題了。


SSL不就是為了干這件事情的嗎,只要你們兩個人先秘密地談好基本信息(一對RSA的key),後面都隨意了。稍微扭曲一下,你可以吧加密後的亂碼直接推送給所有人,但是只有目標讀者最終才能解碼成功。


這絕對應該看看matrix67大神的Weblog,

見下面的兩個鏈接

密碼學協議舉例(五):兩個人能夠在電話上打牌嗎?,

密碼學協議舉例(四):秘密數字的比較


現在 A 有一個秘密,或者一個演算法,想要在公開的環境下給 B 。A 和 B 都有一個加密演算法,稱之為鎖,他們互相不知道對方的鎖。 (題主你的問題是這樣嗎?)

現在從 A 開始:

A———————鎖 A+(秘密),傳給 B———————&> B

B———————鎖 A+ 鎖 B+(秘密),傳給 A————&> A

A———————解開鎖 A,鎖 B+(秘密),傳給 B————&> B

B———————&>解開鎖 B,拿到(秘密)

用這種方法,可以將演算法或者秘密安全的傳過去。


我干過 在qq群用gnupg加密文本聊天 哈哈


(轉):

哎(A)呀,這逼(B)題。我草(C)。你大(D)爺。就聽到交卷鈴聲響起的那一剎那,我們考場有個學習很好的同學大喊:這逼題這逼題哎呀我草你大爺的,我草我草你大爺的這逼題哎呀,你大爺的我草這逼題哎呀我草.......只看見大家默默的在答題卡上寫上:BBACD,CCDBA,DCBAC......


推薦閱讀:

如何理解"語義安全(semantic security)"?
學過密碼學的人會不會自己創造一套密碼?
在讀密碼學英文文獻的時候,總是會遇到一些專業辭彙或短語搭配,但是上網查找又查不到,有什麼好辦法呢?
密碼設置的很複雜有用嗎?
RSA 生成公私鑰時質數是怎麼選的?

TAG:密碼學 |