一、PEPK.jar是什么
PEPK - Portable Encrypted Keys for Android - 是一种用于保护Android应用程序针对Dex文件打包(即:APK包)时签名密钥的加密方案。PEPK.jar是由Google提供的开源工具,可用于加密Android应用的签名密钥,以确保针对DEX文件打包时的签名数据是安全的。
PEPK将签名密钥(用于APK文件的签名)加密并将其保存到Android应用的字符串池中。这样,在向Google Play Store上传应用之前,您可以随时使用PEPK将签名密钥从字符串池解密并签署应用。即使在APK文件被篡改的情况下,PEPK也能够保护签名密钥的安全性。
PEPK的工作原理是将签名密钥与设备的屏幕锁信息结合使用来加密签名密钥。这意味着,只有在设备已经解锁并运行有PEPK.jar的应用程序的情况下,才能对签名密钥进行解密。这使得PEPK能够抵御恶意软件的攻击,并确保仅受信任的用户才能使用签名密钥。
二、为什么需要PEPK.jar
在Android应用程序的发布过程中,签名密钥被认为是极其重要的保密信息。如果签名密钥被泄露或篡改,攻击者可以伪造您的应用程序并将恶意软件注入您的应用程序。这会导致应用程序的声誉受损、用户数据泄露、广告收入减少、甚至带来法律责任。
PEPK.jar提供了一种安全、可移植的方式来保护签名密钥。PEPK.jar的工作原理简单易行,可以方便地集成到您的Android构建过程中。PEPK可以不依赖于任何第三方服务,并且在消耗资源和时间方面也非常高效。
三、PEPK.jar的使用方法
1. 下载PEPK.jar
PEPK.jar是一个独立的Java应用程序,可从Google的GitHub存储库中获得。
curl -LJO https://github.com/googlesamples/android-prepare-PEPK/releases/download/v1.0.0/pepk.jar
2. 生成RSA密钥对
在使用PEPK之前,首先需要创建一个RSA密钥对。您可以使用openssl等工具生成密钥对。
openssl genrsa -out key.pem 2048 openssl pkcs8 -topk8 -inform PEM -outform DER -in key.pem -out key.pk8 -nocrypt openssl rsa -in key.pem -pubout -outform DER -out public.key
您也可以使用Java标准库中的KeyPairGenerator来生成密钥对。
3. 加密密钥
使用PEPK.jar来加密密钥,需要提供以下三个输入:Android应用程序的包名、RSA公钥和私钥文件的路径。您可以使用以下命令执行加密操作:
java -jar pepk.jar --keystore=/path/to/keystore --alias=mykey --output=/path/to/output --encryptionkey= 1234567890ABCDEF1234567890ABCDEF --includekeyid --minversion=--maxversion= --package=
其中:
- keystore:keystore文件的路径,用于签署Android应用程序
- alias:与秘钥对关联的别名
- output:输出文件的路径,存储加密和签名后的密钥数据
- encryptionkey:用于加密密钥的16进制字符串
- includekeyid:如果使用--includekeyid选项,则PEPK会在输出文件中包含加密后的密钥ID。否则,PEPK将使用应用程序包名作为密钥ID。
- minversion和maxversion:用于限制版本号范围,以便将密钥与特定版本的应用程序关联。如果不设置这两个选项,则密钥可以用于任何版本。
- package:要签署的Android应用程序的包名。
4. 解密密钥并签署应用程序
当您准备向Google Play Store上传应用程序之前,您需要使用有PEPK.jar的应用程序解密密钥。解密后,您可以使用此密钥签署应用程序并将其上传到Google Play Store。
对于解密操作,您需要提供以下输入:加密后的密钥(即PEPK输出文件)、RSA私钥文件和用于加密密钥的16进制字符串。
java -jar pepk.jar --keystore=/path/to/keystore --alias=mykey --output=/path/to/output --encryptionkey=1234567890ABCDEF1234567890ABCDEF --includekeyid --minversion=--maxversion= --package=
四、PEPK.jar的优缺点
1. 优点
- 提供了一种简单、安全的方法来保护签名密钥
- 可以方便地集成到Android构建过程中
- 不依赖于任何第三方服务
- 高效且不影响构建时间
- 能够抵御恶意软件的攻击
2. 缺点
- 需要一定的技术知识才能正确使用PEPK
- 开发者需要保证他们的硬件设备已经被充分保护,确保PEPK的加密文件不能被非授权的访问
五、结论
PEPK.jar是保护应用程序签名密钥的安全、高效方案。它能够抵御恶意软件的攻击,并且可以方便地集成到Android构建过程中。虽然使用PEPK可能需要一定技术水平,但是它能够在很大程度上提高您的应用程序的安全性。