簡體   English   中英

Android –安全地向服務器發送數據/從服務器接收數據

[英]Android – Sending/Receiving data to/from server securely

我正在開發一個Android應用程序。 該應用程序通過PHP API與服務器通信。 每個用戶必須創建一個帳戶。 因此,該應用程序具有登錄功能。 我正在進一步研究如何在客戶端(Android應用程序)和服務器之間安全地傳輸數據。 例如,用戶通過POST發送請求其用戶名/密碼以便登錄。

根據我所閱讀的內容,我可以安全地假設,如果有人“偵聽”客戶端和服務器之間的交易,他可以竊取用戶名/密碼組合並使用它來登錄合法用戶的帳戶。 那是對的嗎?

解決此問題的方法是先加密數據(例如,用戶名和密碼),然后再從客戶端或服務器發送數據。 然后,數據將被接收方(客戶端或服務器)解密。 我通過在客戶端(用Java編寫)和服務器(用PHP編寫)上使用crypt / decrypt函數來做到這一點。 每個函數都具有相同的IV(初始化向量)和秘密密鑰(說實話,我對IV的用法了解不多,因此如果我說錯了請原諒。我在Google周圍搜集信息,但任何有用的鏈接將不勝感激) 。

據我了解,此實現的問題在於,APK文件可能會從客戶端反編譯並獲得IV和密鑰。 結果,偵聽器可以解密發送的數據。 那是對的嗎?

試圖找到解決這個問題的方法,我有一個建議,我希望您的意見。 如果在用戶注冊期間為每個用戶提供了唯一的IV和密鑰,該怎么辦。 這些值既存儲到MySQL數據庫(服務器端),又存儲到SQLite數據庫(客戶端)。 每當需要通過發布請求發送數據時,用戶的ID(可以是簡單的整數)和要發送的數據都將使用針對每個用戶的唯一IV /秘密密鑰進行加密。 它們存儲在本地,因此“偵聽器”無法訪問它們。 即使他反編譯APK,他也將只能訪問他已經知道的自己的IV /秘密密鑰。 然后在服務器端,使用存儲在服務器上的相同IV /秘密密鑰解密數據。 從服務器向客戶端發送數據時,將應用相同的過程。

這是正確的方法嗎?

重用相同的對稱密鑰和相同的IV是極其不正確的方法,並且永遠不能使用。

重用相同的密鑰和IV將啟用攻擊,攻擊者只要竊聽加密流量足夠長的時間,便能夠恢復您的秘密密鑰。 當攻擊者獲得您的密鑰時,他將能夠解密所有過去和將來的通信。

為了保護數據傳輸,您應該使用HTTPS(如果您的數據傳輸協議不是基於HTTP的,則直接使用SSL / TLS)。

如果您唯一關心的是與服務器安全通信,建議您將ssl證書安裝到服務器。 這樣做,將通過基礎協議保護通信。 為了促進與服務器的通信以實現ssl通信,我建議您使用查詢庫,這里有一個鏈接 !。 也不要忘記查看Android的ca兼容性列表。

希望能幫助到你。

這是一個相當老的問題,所以我很驚訝它沒有更完整的答復。 似乎您了解對稱加密的概念,但是缺少公共/專用密鑰加密的知識。 RSA中查找實現公鑰/私鑰加密的方法。 這樣,您可以在每個會話開始時(通過加密安全的RNG協助)生成新的隨機密鑰以及IV,以饋入對稱加密系統。 這意味着,從頭到尾收聽的任何人都將無法通過強行使用RSA密鑰或symetric(AES?)密鑰來理解您的系統。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM