2010-11-08 34 views
5

我要尋找一個交換密碼 - 這是交換密碼?

E(K₁,E(K₂,P)) = E(K₂,E(K₁,P)) 

,但不是關聯 - 這是

E(K,P) ≠ E(P,K) 

的規則進行異或,否則就OK了。

對稱密碼會更好,但非對稱密碼也可以。

基本協議我想要實現的是:

  1. Alice有標記(32位整數)的列表,並且她加密使用相同的密鑰
  2. Alice發送列表中的每個標記(K0)加密令牌給Bob
  3. Bob隨機選擇列表,用單獨的密鑰(K1-Kn)加密每個令牌,標記每個令牌並將列表返回給Alice。
  4. 艾麗絲進行解密K0每個令牌,離開她的令牌的列表,每一個單獨的密鑰進行加密(K1 - Kn)的
  5. 稍後,鮑勃向Alice發送針對特定標籤(KX)
  6. 愛麗絲的關鍵解密與KX給她的標記爲X
  7. 鮑勃可以看到明文的令牌明文令牌,所以從它交給他以前提供的信息,他必須不能推導K0。

有人可以建議我可以使用的密碼,也可以指向我的密碼實現嗎?

我的密碼協議和應用的理解,但我真的不神交的大部分密碼的數學那裏。雖然逐步的數學指導將是確定的。

我打算在Clojure中實現這一點,所以任何Java庫都很好。但是,任何代碼都很好,因爲我理解代碼。

+0

有沒有什麼嚴重的原因,爲什麼Alice只有在用Bob收到的密鑰解密之後才能堅持K0並用K0解密令牌? – 2010-11-09 06:45:04

+0

@Lunatic實驗主義者:是的。這只是一個簡化的協議描述。接下來發生的事情是,Alice生成一堆密鑰並自己加密每個令牌。每個令牌現在被雙倍加密。如果鮑勃想要向愛麗絲透露令牌X,他會將他的Kx發送給她。如果愛麗絲想要向Bob顯示令牌X,她會將她的Kx發送給他。 – camh 2010-11-09 08:02:17

回答

3

這聽起來像你想實現「心理撲克」(或者,如果沒有,你應該查查研究它,因爲它是analagous您的問題)。

SRA算法具有您所需的屬性。這是一個有點難以找到的信息,但它本質上只是RSA除了ed指數都祕而不宣。平凡:

(P E1E2 ==(P E2E1

+0

我讀過一堆精神撲克的東西,但它都是假設所有玩家都知道的標準52/54牌套牌。我使用任意大小的未知套牌(在所有可用的卡都已知的情況下未知,但對於非所有者不知道卡組中的特定卡)。不幸的是,我的數學技能還沒有達到我能夠適應心理撲克的水平。感謝參考SRA - 我會查找它。 – camh 2010-11-08 21:16:20

0

下面是指我hobbiest的解決方案在C#中使用我自己的加密程序。程序和源代碼是免費的。

記住「鎖定方塊益智」講述了上安全是否播客?

這裏的情節...... 情節#33 | 2006年3月30日| 43分鐘。 對稱分組密碼

https://www.grc.com/sn/sn-033.txt

史蒂夫說... ...... Leo和我的回答是上週的益智遊戲/謎題其中探討使用兩個專用 一次一密的想法 「鍵,」像兩個掛鎖,以安全地傳達 兩方之間的消息,兩個 誰都沒有對方的密鑰。然後我們繼續不斷的 基本加密技術,通過遊描述 對稱分組密碼的操作...

史蒂夫和Leo認爲,竊聽者看到Alice的密文 前後加密可能 XOR兩者一起,並得出她的祕密鑰匙。然而,如果使用不使用簡單XORing 加密的複雜交換密碼,則I 認爲密鑰交換將是安全的並且密鑰交換將工作。

例如... BOB用他的密鑰加密消息。 ALICE用她的密鑰加密BOB上面加密的msg。 ALICE將上面的加密信息發送回BOB。 BOB用他的密鑰解密ALICE的上述味精。 BOB將以上發送給ALICE。 ALICE用她的密鑰解密上面。 ALICE現在可以讀取BOB的原始解密密文,並且他們不需要 來交換密鑰。 如果算法不是一個簡單的 '純文本和密鑰異想天開,竊聽者攻擊將不起作用。

這個密碼是一個交換,複雜的算法。

以記事本開頭的文本文件包含一個字符'm'。 m是十六進制6d 01101101. Â是十六進制c2 11000010是由'b'加密,然後發送給愛麗絲。 ø是十六進制d8 11011000是愛麗絲對''的加密,其中bob解密爲''' 併發送給愛麗絲。 £是十六進制a3 10100011,alice用她的密鑰解密爲'm'。 m是愛麗絲解密結果 竊聽者在加密之前看到alice的味精。 竊聽者在加密後看到ø愛麗絲的味精。 竊聽者xors和ø。 11000010' 11011000'ø' 00011010竊聽者的XOR結果= 1a(十六進制)。 如果一個竊聽者的攻擊工作,他會發現'E'十六進制45 01001001 這是第一個字母

愛麗絲的鑰匙。

這似乎是比PGP更簡單的密鑰交換等。所需要的只是 雙方使用相同的 加密程序並且同意驗證器。

我承認自己是最愛的人。如果有人想要WINDOWS C#.NET程序 和/或密碼的源代碼,他們可能有 。

下面是一個更長的隨機密鑰的例子。

PLAIN TEXT 這是一個測試。

Bob的密鑰 kZtOfS0kKqcRLjTNPh7OjcJKZZFLjmm5OVm02YlrBQN0zI9SxOD1zJjQcpetUbX

Bob的密文給Alice。 1IÎ.8Ío#「ëìAùJ」

Alice的KEY O1yfuV7MpX3n4wtefUhr6YctRaeCcrrzH7LqLNRUQCMVZuL5Mr0Bw3qMeIT92hg

Alice的密文給Bob μRÖ³#100,fzkÆaå

BOB解碼Alice的高於該BELOW = øqqøð<ª>點& @ <, 並且發現高於返回到ALICE的哪個ALICE解碼產量... 這是一個測試

+0

進行身份驗證只需在郵件內部以明文形式添加約定的密碼,但不是郵件密文的一部分。只需要最後2次交換。例如「μRÖ³#ÓÓ,fzkÆaåapassword」 – user1477194 2014-08-18 17:58:50

0

我正在做類似的事情,我在OFB(輸出反饋)模式下使用AES。在此模式下,使用某個密鑰通過AES對IV(公衆已知的隨機值)進行加密。然後這個輸出與您的數據異或。輸出(在與數據異或之前)再次被加密以獲得具有更多數據的另一個輸出到XOR。這不僅是可交換的,而且加密和解密算法是相同的。 http://en.wikipedia.org/wiki/Block_cipher_mode_of_operation#Output_Feedback_.28OFB.29