You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何保障Android应用与Web服务器的连接安全及密钥生成存储

一、HTTPS基础上的额外加密建议

HTTPS已覆盖传输层安全,但针对关键信息可叠加以下防护手段:

  • 端到端加密(E2EE):敏感数据在Android客户端本地加密后再发送,服务器仅存储密文无法直接解析。优先选用AES-GCM算法,自带完整性校验,可防止数据篡改。
  • 双向TLS认证:除客户端验证服务器证书外,服务器也要求客户端提供合法证书才能建立连接。能确保连接双方身份可信,适合医疗、金融等高敏感场景。
  • 临时会话密钥:每次会话通过ECDH等密钥交换算法协商一次性密钥,用完立即销毁。即便密钥泄露,仅影响当前会话,不会波及其他数据。
  • 敏感字段脱敏+加密:非必要敏感信息先脱敏(如手机号仅保留前3后4位),再加密传输,降低数据泄露后的危害范围。
二、Android端用Keystore生成密钥的实现

Android Keystore将密钥存储在系统安全区域(如TEE),密钥不会暴露给APP进程,能有效防范窃取。以下是具体代码示例:

生成AES对称加密密钥

import android.security.keystore.KeyGenParameterSpec
import android.security.keystore.KeyProperties
import java.security.KeyGenerator
import javax.crypto.SecretKey

fun generateAesKey(alias: String): SecretKey {
    val keyGenerator = KeyGenerator.getInstance(
        KeyProperties.KEY_ALGORITHM_AES,
        "AndroidKeyStore"
    )
    val spec = KeyGenParameterSpec.Builder(
        alias,
        KeyProperties.PURPOSE_ENCRYPT or KeyProperties.PURPOSE_DECRYPT
    )
        .setBlockModes(KeyProperties.BLOCK_MODE_GCM)
        .setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_NONE)
        .setUserAuthenticationRequired(false) // 按需设置是否需要指纹/密码验证
        .setRandomizedEncryptionRequired(true)
        .build()
    keyGenerator.init(spec)
    return keyGenerator.generateKey()
}

生成RSA密钥对(用于密钥交换或签名)

import android.security.keystore.KeyGenParameterSpec
import android.security.keystore.KeyProperties
import java.security.KeyPair
import java.security.KeyPairGenerator

fun generateRsaKeyPair(alias: String): KeyPair {
    val keyPairGenerator = KeyPairGenerator.getInstance(
        KeyProperties.KEY_ALGORITHM_RSA,
        "AndroidKeyStore"
    )
    val spec = KeyGenParameterSpec.Builder(
        alias,
        KeyProperties.PURPOSE_ENCRYPT or KeyProperties.PURPOSE_DECRYPT or KeyProperties.PURPOSE_SIGN or KeyProperties.PURPOSE_VERIFY
    )
        .setKeySize(2048) // 推荐2048或4096位
        .setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_RSA_OAEP)
        .setSignaturePaddings(KeyProperties.SIGNATURE_PADDING_RSA_PKCS1)
        .build()
    keyPairGenerator.initialize(spec)
    return keyPairGenerator.generateKeyPair()
}
三、Web服务器端密钥安全存储方案

服务器端密钥是核心资产,绝对禁止明文存储,推荐以下方案:

  • 硬件安全模块(HSM):将密钥存入专用硬件设备,所有加密/解密、签名操作都在HSM内部完成,密钥永远不会离开设备。这是安全性最高的方案,适合对安全要求极高的系统。
  • 云服务商密钥管理服务(KMS):依赖AWS KMS、GCP Cloud KMS等服务,由云平台负责密钥的安全存储与访问控制,只需调用API使用密钥,无需自行管理存储细节。
  • 操作系统级密钥管理:Linux可使用libsecret或cryptsetup,Windows用DPAPI,将密钥存入系统安全存储区,仅授权进程可访问。
  • 加密后存储+主密钥隔离:若必须将密钥存在数据库或文件中,先用AES-GCM加密密钥,再存储密文。用于加密的主密钥需单独存放在HSM或KMS中,绝不落地到磁盘。
  • 严格访问控制:给存储密钥的文件设置最小权限(如仅运行服务的用户可读),数据库密钥字段仅允许特定账号查询,禁止远程直接访问密钥存储位置。
  • 定期密钥轮换:定期更换密钥,轮换时做好新旧密钥过渡,确保服务不中断。即便旧密钥泄露,影响范围也会被限制。

内容的提问来源于stack exchange,提问作者Elio Bteich

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 02:05:32