2012-02-21 53 views
-1

有關證書和密鑰的Apple文檔說明可以將公鑰發送給其他用戶。這當然是他們的觀點。在中間人攻擊中,不要陷入關於人的側線,我想知道這應該如何工作。交換公鑰

我使用base64編碼在設備之間的電子郵件中發送公鑰。抵達後,他們不工作,並且當我嘗試使用它們時,接收應用程序會拋出異常。 base64代碼和密鑰生成和檢索代碼已經在另一個應用程序中進行了詳盡的測試,並且可以工作。這裏是一個簡單的問題:

(1)所有的關鍵API使用SecKeyRef鍵。

(2)SecKeyRef明顯包含指針,它與不同的位每次我從鑰匙串檢索密鑰對時間出來在某些偏移

(3)如果我檢索密鑰作爲CFDataRef,這應該爲了「平坦」,我得到了一個截然不同的野獸,總是具有相同的值,還有很多零填充(base64中的大寫A)。

(4)進口CFDataRef不起作用

我不沒有做大量的調查研究問這個,閱讀和測試,我承認我很爲難,沒有人知道如何交換公共鑰匙?我已經寫了Windows應用程序多年,這樣做。證書鏈是我需要在這裏完成的一個非常大的錘子。

謝謝。

回答

0

這似乎是一個困惑的問題。你在問公鑰交換是如何工作的,或者你爲什麼不能將內存中的對象轉移到另一臺沒有指針斷開的機器上。

第一個問題的答案是,您只需傳輸公鑰 - 這是一系列字節,通常是十六進制或base64編碼或包裝在X509(ASN1)證書內。公鑰本身告訴其他用戶足夠的信息,他們可以將任何字節流加密成可以由持有私鑰的人解密的東西。因此,公開密鑰的傳輸可以通過簡單的方式進行。

公鑰密碼學唯一的安全弱點就是如果攻擊者可以在公鑰傳輸和密文中進行中間人攻擊。如果A希望轉移到B,並且M可以看到並修改兩者之間的所有流量,那麼M可以簡單地假裝爲B,安全地連接到A,然後可以解密A試圖發送給B的內容。通過對稱性,他可以做到與B相同,因此雙向通道被破壞。

SSL通過使用信任鏈驗證來打敗這種理論攻擊,確保M無法假裝爲B,即使B不爲A所知,因爲B可以依靠某些共享的第三方來證明自己的身份(CA)。這就是爲什麼最近對Diginotar和Comodo的攻擊如此嚴重。加密是安全的,但身份驗證不是。

所以簡而言之,答案就是您只需傳輸密鑰。公鑰不需要安全地傳輸給他們工作,但是如果你沒有某種預先共享的祕密或者某種連鎖信任,那麼你就會自己開放,中等解密攻擊。

+0

你顯然沒有看完我的問題,並給出了完全正切的答案。我的問題在於密鑰的傳輸,我詳細解釋了這些密鑰。 – 2012-03-11 15:22:10

+0

我從那以後發現了一個使用CFDataRef密鑰版本的解決方案,它涉及將它們導入到鑰匙串中;僅僅將它們解碼爲原始位的行爲是不夠的。但是我放棄了這個項目,因爲我不喜歡追求政府執照的麻煩,因爲我住在越南。 – 2012-03-11 15:25:59