2014-06-18 70 views
24

我們有一個基於C#的web服務,它接收來自政治組織的文檔,這些文檔是具有法律約束力的文檔。如何向外部團體證明數據文件未被篡改?

目前,我們向收件人提供收據,收據中包含收到的文件的校驗和,因此我們可以在稍後時間向文件管理員證明存儲在我們系統中的文件與其原始提交相匹配。收據作爲電子郵件發送給過濾器。但是,我們無法向第三方審覈員證明存儲在我們系統中的文件和校驗和從未發生變化(即惡意DBA可能會更改校驗和值以與某些僞造替換文檔的內容相匹配)。

我目前正在考慮在雲中託管的只寫「日誌文件」(可能與第三方審覈員會發現合理可信的供應商,比如AWS)我們可以記錄每個在發生時提交id和校驗和。理想情況下,這個遠程日誌文件的行爲就像是一本老派的會計期刊 - 你只能用筆寫下來,所以你永遠無法抹去以前的記錄!

另一個選擇可能是將這些電子郵件收據發送給第三方電子郵件存檔提供程序? (我們的消息歷史記錄的量很小,這可能不值得與歸檔提供商的對話)

有沒有人有建議?

+6

聽起來像你需要加密簽名。 – zneak

+2

「*我們*提供收據給* filer * [...],所以我們*可以在稍後的時間向文件管理員證明文件[...]]與他們原來的提交相匹配「 - 如果該收據實際上並未用您公開的公鑰加密簽名,則此協議不起作用:任何一方都可以更改提交內容並僞造匹配的收據,從而聲稱另一方是僞造的 – JimmyB

+0

你也可以在http://security.stackexchange.com/上得到答案,因爲他們專注於信息安全。 – woliveirajr

回答

26

雙方最安全的解決方案是讓您的客戶用有效的加密證書籤署他們的提交文件,以便他們可以毫無疑問地證實提交文件沒有被篡改。

也有辦法在程序上簽名和驗證那些在C#中,這可以給你出個主意吧:http://blogs.msdn.com/b/alejacma/archive/2008/06/25/how-to-sign-and-verify-the-signature-with-net-and-a-certificate-c.aspx?PageIndex=1

+0

經過一番閱讀,這絕對看起來像是正確的路徑,但是我們無法要求申報人擁有自己的證書 - 這將構成對申報人的*「不當負擔」*。 _(這對我們來說並不是幫助我們,這些申報人是寫法律文件的同一個人)。我認爲我們的最終答案是聘請安全專家,如@ david.pfx所建議的那樣。 –

+0

請注意,對於任何加密協議可能有特殊的法律要求被當局接受爲*證據*。這些要求通常包括通過官方機構對與流程相關的所有技術和組織措施進行認證,在大多數情況下,只有專業公司才能夠將其加密解決方案作爲產品提供,因爲它需要大量成本和努力。所以,如果你出於某種(某種程度)嚴重的考慮,沒有專業的外部支持就沒有辦法相處。 – JimmyB

2

好消息是,這個問題(並且可能喜歡它)可以用公鑰來解決crytography。壞消息是設計協議是專家的工作。我最後一次遇到這樣的人時,我問了一個叫布魯斯·施奈爾的人來幫忙,但還有很多其他的專家。

基本上你所做的就是這樣。首先你準備一份文件的crytographic摘要。這是一種校驗和,但保證是獨一無二的。沒有人可以使用相同的摘要創建另一個文檔。

然後你和文件管理器分別使用你自己的公鑰加密這個文摘並交換加密的密鑰(當然,保留原文摘要)。如果存在挑戰,則生成文件管理器的加密摘要並要求他使用其私鑰對其進行解密。如果它解密正確,並且與文件中的摘要相匹配,那麼它是正確的,不能被否定。他也可以對你做同樣的事情。

證書只是各種工具存在的一種特殊的公鑰。您可以使用證書,或者只使用密鑰和一組工具,如PGP。

這是一個非常簡單的版本。還有更復雜的系統,但我認爲它會花費你一些錢來讓一個人工作。

+0

謝謝,這真的幫助我想象一個過程如何構建。當然,這也告訴我我知道得有多少!外部專家肯定會被要求。 –

相關問題