行业动态
如何确保从appstore下载的app是没被恶意篡改
2021-03-14

手机如何确保从应用商店下载的应用未被恶意篡改,以及如何验证应用开发者的身份?

一、数字符号

数字签名基于公共密钥加密技术,可以验证数据的完整性和真实性。它涉及公钥,私钥和数字证书。专用密钥用于签名,公用密钥用于验证,数字证书用于验证用户身份。

签名

签名过程使用哈希函数和私钥加密来获取数字签名。

签名过程:原始数据通过哈希函数进行处理以获得哈希值;通过加密私钥获得的哈希值用于获得数字签名值s1。如图所示,

验证

使用与签名过程相同的哈希函数处理原始数据,以获取哈希值h1;然后使用公钥解密s1以获得h2。比较h1和h2的值,如果两者相等,则验证成功。不相等,验证失败。如图所示,

Verify.png

数字证书

数字签名可以确保数据未被篡改,但是仍然存在问题。任何人都可以申请一对公钥和私钥。您怎么知道解密后的公钥属于某个用户?此时ios开发数字签名代码,要求用户向数字证书的证书颁发机构(Certification Authority,CA)提出申请,该证书将用户的信息与用户的公钥和CA的信息绑定在一起。信息使用CA的私钥进行数字签名,数字签名,用户信息,用户公共密钥和CA信息构成数字证书。

Digital certificate.png

数字证书验证:生产手机时,将CA的公钥导入到系统中,并且它是可信任的。因此,可以使用公钥验证数字证书的真实性。

数字证书申请

数字证书是数字签名的基础,用于验证用户的身份。如何从Apple申请数字证书(即开发人员证书)?

在申请证书之前,应在本地计算机上生成一个CSR文件(CertificateSigningRequest)。 CSR文件是一个证书请求文件,它使用钥匙串生成,并同时生成一对密钥:公钥和私钥。私钥存储在钥匙串中,CSR文件绑定到公钥和一些证书申请信息。

开发人员使用CSR文件从Apple开发人员网站申请数字证书(开发人员证书)。 Apple将CSR中的公钥与开发人员信息绑定在一起以进行数字签名,并生成开发人员证书(后缀.cer)。有关详细的应用信息,请参阅此处

注意

证书下有一个带有配对私钥的小钥匙。可以通过Mac上的钥匙串检查证书的内容。

IOS代码签名和验证签名

当xcode对应用程序进行签名时,它不会立即对整个安装包进行签名。相反,每个文件都经过单独签名,并且使用的规则如下:

开发人员只需要在xcode中设置有效的开发人员证书(包括私钥),该代码将在编译过程中自动签名。我们还可以使用codesign命令进行签名或查看签名信息。

$ security find-identity -v -p codesigning
  1) 6F58B7E08291BFFEB94746AE4416331679BB3ED3 "iPhone Developer: 1666522608@qq.com (DY6MN4A4Y8)"

$ codesign -s 'iPhone Developer: 1666522608@qq.com (DY6MN4A4Y8)' Example.app

$ codesign -f -s 'iPhone Developer: 1666522608@qq.com (DY6MN4A4Y8)' Example.app

$ codesign -vv -d Example.app

Executable=/Users/apple/Library/Developer/Xcode/DerivedData/Example-IOSegobnxqrpyiplcezotfhlhohfykp/Build/Products/Debug-iphoneos/Example.app/v2ex
Identifier=singro.v2ex.qh
Format=app bundle with Mach-O universal (armv7 arm64)
CodeDirectory v=20400 size=35314 flags=0x0(none) hashes=1095+5 location=embedded
Signature size=4800
Authority=iPhone Developer: 1666522608@qq.com (DY6MN4A4Y8)
Authority=Apple Worldwide Developer Relations Certification Authority
Authority=Apple Root CA
Signed Time=2018年10月30日 17:26:44
Info.plist entries=35
TeamIdentifier=J5FZC7U82Y
Sealed Resources version=2 rules=13 files=44
Internal requirements count=1 size=180


393701618