2012-11-15 84 views
0

確保REST API我問過與此相關的一個在這裏一個問題:與哈希簽名

Securely Passing UserID from ASP.Net to Javascript

但是現在我有一個更詳細/具體的問題。我有這項服務,而且我的應用程序將要使用我的計劃來保護它的服務,是基於某些值,隨機數和密鑰生成哈希。我唯一的問題是,似乎爲了驗證散列,我將不得不發送所有的值加上隨機數,除了密鑰。這是我設計中的缺陷還是這種事情是如何完成的?我搜索了一下,一直沒有能夠找出這是否是正確的安全的方式來做到這一點。

例如可以說我需要將值1,2和3傳遞給我的休息服務,所以我用戶的電話號碼,隨機數和密鑰生成一個哈希,現在爲了生成哈希再次我需要通過以上所有的除鑰匙(我可以根據用戶的電話號碼檢索)。

我完全讓我的服務受到攻擊,正確地保護它,或者在兩者之間?

編輯:由拼寫和語法校正

編輯2:最後,通過使用MVC 4形式的身份驗證,兩個項目之間相同的cookie名稱,並利用一個全局應用[授權的來到一個令人滿意的解決方案]屬性

回答

1

這個計劃沒有什麼本質上的錯誤。如果客戶端發送:

data . nonce . hash(data . nonce . shared-secret) 

然後服務器通過檢查hash(data . nonce . shared-secret)由客戶提供的散列相匹配驗證消息,你會對陣雙方篡改和重播(假設,當然安全,您使用一個合理的密碼散列算法)。

在這種設計下,客戶端甚至可以生成自己的隨機數,前提是不存在兩個客戶端會產生相同的隨機數的風險。

但是,竊聽者仍然可以看到你發送的所有數據......所以,除非有一個非常好的理由不使用,否則我會簡單地使用https(除非有其他要求我不知道,完全足夠)。

+0

好吧,有道理,數據是否可以包含用戶標識符並仍然安全?我正在使用HMAC256算法fyi。 – Pseudonym

+0

你必須定義「安全」。在這個方案下,服務器將能夠檢測到篡改和重放攻擊,但它不會*是保密的(顯然)。 –

+0

足夠公平,在這個範圍內,我們試圖防止重播和中間人攻擊,當用戶到達應用程序的這個區域時,他們應該事先驗證他們的憑據 – Pseudonym