提供程式變更
從 Android P 開始,對於 AndroidOpenSSL (也稱為 Conscrypt) 提供程式所重複的、來自於 BC 提供程式的部分功能,我們計劃將予以棄用。
此改動僅會影響在呼叫 getInstance() 方法時明確指定 BC 提供程式的應用程式。
需要說明的一點是,我們此舉的目的不是因為對 BC 提供程式的實施安全存在疑慮,而是因為重複功能會造成額外的成本和風險,卻無法帶來太多益處。
如果您在 getInstance() 呼叫中不會指定提供程式,則無需做出任何改動。
如果您按名稱或例項指定提供程式 – 例如,Cipher.getInstance(“AES/CBC/PKCS7PADDING”, “BC”) 或 Cipher.getInstance(“AES/CBC/PKCS7PADDING”, Security.getProvider(“BC”)) – 則 Android P 的行為將取決於您應用的目標 API 級別。
對於目標級別早於 P 的應用,呼叫會返回 BC 實施方法,並在應用日誌中記錄警告。對於目標級別為 Android P 或之後版本的應用,呼叫會丟擲 NoSuchAlgorithmException。
為了解決此問題,您需要停止指定提供程式,並使用預設實施方法。
在後續的 Android 版本中,我們計劃完全移除 BC 提供程式的棄用功能。在移除後,所有請求 BC 提供程式的呼叫 (不論按名稱還是例項) 都會丟擲 NoSuchAlgorithmException。
移除 Crypto 提供程式
在先前的帖子中,我們曾宣佈自 Android Nougat 開始棄用 Crypto 提供程式。
此後,以 API 23 (Marshmallow) 或更早級別為目標的應用程式請求 Crypto 提供程式會成功,但以 API 24 (Nougat) 或之後級別為目標的應用程式請求則會失敗。
在 Android P 中,我們計劃完全移除 Crypto 提供程式。在移除後,所有對 SecureRandom.getInstance(“SHA1PRNG”, “Crypto”) 的呼叫都會丟擲 NoSuchProviderException。
請大家對自己的應用進行相應更新。