2017-05-31 29 views
-5

我目前正在開發一個與服務器「交談」的控制面板。是沒有簽名的RSA加密安全嗎?

當然,我希望每個請求之間發送加密。

我對加密很陌生,只是想知道發送使用RSA加密的未簽名請求是否安全?

+0

爲什麼不只是使用SSL?滾動您自己的加密永遠不會結束 – chrylis

+2

@chrylis您的意思是[TLS](http://disablessl3.com/)。 –

+0

RSA是一個可以由專家用來形成可以提供安全屬性的系統的原語。不要嘗試自己使用RSA。 –

回答

0

這取決於你需要安全的東西,特別是你要發送的東西。如果您要將信息發送到需要被保護的服務器,而不是被服務器以外的任何其他設備讀取,那麼RSA可以自行工作。但是,從服務器的角度來看,任何具有足夠技術知識的人都可以將該消息發送給作爲您的服務器。簽署RSA加密數據只是確保服務器收到的數據的發送者實際上是你而不是假裝成你的某人/某人。如果你想要快速和骯髒的版本,跳到最後。

由於您不熟悉加密技術,因此我會提供一個簡要說明。您可能知道RSA使用公私鑰系統。任何擁有公鑰的人都可以加密數據並將其發送到服務器。但是,只有服務器具有能夠解密該數據的私鑰。這意味着有人攔截髮送到服務器的消息(出於所有意圖和目的)都無法獲取正在發送的原始消息。然而,某人/某事可以將他們想要的任何加密數據發送到服務器,並「說」它是你(如果做得夠好,服務器將不知道)。這就是簽名進入的地方。簽名過程會將發送者的私鑰加密到解密的(儘管它不是第一個加密的,它使用RSA解密算法)的散列。然後收件人可以使用發件人的公鑰和RSA加密算法來接收原始哈希值。沒有發送者的私鑰生成這個簽名是沒有可行的方式,所以如果簽名中的哈希與消息的實際計算哈希相同,它必須由聲稱已經發送它的人發送(或者他們的公鑰)。

例如,假設Alice正在嘗試使用RSA加密將消息發送給Bob。她發送加密的消息,但被Eve截獲。假設一個足夠大的密鑰,Eve將無法在沒有Bob的私鑰的情況下解密該消息。所以,夏娃從這個信息中得不到多少用處。但是,讓我們假設馬洛裏截取這條消息。她仍然無法閱讀,但她可以發送一條消息給Bob,並用Bob的公鑰加密,並使其看起來來自Alice。鮑勃無法知道該消息實際上不是來自愛麗絲。但是,如果Alice和Bob也使用簽名,Mallory將無法冒充Alice(除非Mallory知道Alice的私鑰)。 Alice的消息將包含加密的消息(儘管使用RSA解密算法)和Alice的私鑰。擁有Alice公共密鑰的任何人都可以解密該散列,但Mallory無法在沒有Alice私鑰的情況下生成Mallory消息的簽名散列。 Alice的消息將使用Bob的公鑰加密,並且她將在加密的末尾(再次使用RSA解密算法)和她自己的私鑰添加消息的散列。如果Bob收到來自Alice的簽名消息,他將使用他的私鑰解密消息並使用Alice的公鑰解密簽名(儘管使用RSA加密算法)。然後他會計算消息的散列。如果計算出的散列與簽名中的散列相同,則該消息只能來自具有Alice私鑰的人(除非她的安全性受到損害,否則對於所有意圖和目的,Alice都是如此)。因此,RSA完全適用於確保有人攔截郵件無法讀取郵件,但簽署郵件是服務器確保郵件來自您而不是模仿者的必要條件。如果你發送了一些重要的東西,你也應該使用簽名。

關於RSA如何安全:How safe and secure is RSA?

RSA一般(但謹防維基百科):https://en.wikipedia.org/wiki/RSA_(cryptosystem)


注:如果你是我的措辭解釋在RSA簽名系統混淆關於哈希的加密,我會盡量在這裏更清楚。哈希使用發件人的私鑰進行加密。這樣,只有發件人才能夠加密哈希,因爲只有他們知道他們的私鑰。但是,RSA系統使用公用密鑰進行加密,並使用私鑰進行解密(這是有道理的,因此只有收件人可以閱讀該消息)。簽名需要反向工作,這樣只有發件人和他們的私鑰才能簽名,但擁有公鑰的任何人都可以查看哈希。所以,簽名反過來工作。加密簽名使用RSA解密算法,解密簽名使用RSA加密算法。就像RSA確保只有收件人可以閱讀郵件一樣,簽名的反向工作方式使得只有發件人才能簽名。

此外,對於那些甚至可能存在的安全漏洞最小的人來說,添加散列確實會降低郵件的安全性。任何擁有發件人公鑰的人都可以在攔截郵件時發現郵件的散列。哈希函數壓縮消息的長度,因此對於給定的散列,可以存在許多具有相同散列的不同消息,它們只會是不同的消息(對於可以採用理論上無限輸入大小的散列,有無限數量的可能性)。所以,對於一個給定的散列算法,存在一個反向算法,它可以採用散列併爲不同的消息長度提供可能的消息。加密消息的散列因此可以用來獲得不同的可能的消息值。那些值可以用接收者的公鑰進行RSA加密。如果該加密值與原始加密消息相匹配,則解密消息就是該值。這是破解RSA加密的兩種方式之一:更公開的密鑰分解,以及通過RSA加密運行所有可能的消息來強制所有可能的消息。使用第二種方法時,使用散列只會限制必須測試的消息數量,使其更容易破解。然而,除非消息短得令人難以置信,否則這很少會成爲一個問題(從那時起,首先嚐試消息的數量非常少,散列可以減少到更少的可能性)。所以,除非你發送非常非常簡短的消息,這絕對是絕密的,否則你不必擔心這一點。請記住,這種類型的攻擊完全不會損害私鑰,如果攻擊者設法解密一條消息,他們將不得不再次通過整個過程來解密另一條消息。因此,這不是一種有效的方法,因此幾乎從不使用。我主要是把這個放在這裏,所以人們不覺得有必要憤怒地評論包含簽名的那個缺陷。