ความโปร่งใสของโค้ดเป็นกลไกการเซ็นโค้ดและการยืนยันที่ไม่บังคับสำหรับ แอปที่เผยแพร่ด้วย Android App Bundle ใช้ความโปร่งใสของโค้ด คีย์ Signing ที่นักพัฒนาแอปเก็บไว้แต่เพียงผู้เดียว
ความโปร่งใสของโค้ดไม่ขึ้นอยู่กับรูปแบบการลงนามที่ใช้สำหรับ App Bundle และ APK คีย์ความโปร่งใสของโค้ดแยกและแตกต่างจาก App Signing ที่เก็บไว้ในโครงสร้างพื้นฐานที่ปลอดภัยของ Google เมื่อใช้ Play App Signing
ลักษณะการทำงานของความโปร่งใสของโค้ด
กระบวนการนี้ทำงานโดยรวมไฟล์ความโปร่งใสของโค้ดไว้��นแพ็กเกจหลัง สร้างขึ้น แต่ก่อนที่จะอัปโหลดไปยัง Play Console เพื่อเผยแพร่
ไฟล์ความโปร่งใสของโค้ดคือ JSON Web Token (JWT) ที่มีรายการ DEX ไฟล์และไลบรารีแบบเนทีฟที่รวมอยู่ในแพ็กเกจ และแฮชของไฟล์ดังกล่าว ถึงเวลา ลงนามโดยใช้คีย์ความโปร่งใสของโค้ดที่นักพัฒนาแอปเก็บไว้เท่านั้น
ไฟล์ความโปร่งใสของโค้ดนี้เผยแพร่ไปยัง APK พื้นฐานที่สร้างขึ้นจากแอป (โดยเฉพาะการแยกหลักของโมดูลฐาน) ซึ่งสามารถเป็น ยืนยันแล้วว่า
- ไฟล์ DEX และไฟล์โค้ดแบบเนทีฟทั้งหมดที่แสดงใน APK มีแฮชที่ตรงกันใน ไฟล์ความโปร่งใสของโค้ด
- คอมโพเนนต์คีย์สาธารณะของคีย์การรับรองความโปร่งใสของโค้ดในแอป ตรงกับคีย์สาธารณะของนักพัฒนาซอฟต์แวร์ (ซึ่งต้องมีการระบุโดย ผ่านช่องทางที่แยกต่างหากและมีความปลอดภัย)
รวมทั้งช่วยยืนยันว่าโค้ดที่มีอยู่ใน APK ตรงกับสิ่งที่นักพัฒนาแอปตั้งใจไว้ และไม่มีการแก้ไข
ไฟล์ความโปร่งใสของโค้ดไม่ได้ยืนยันทรัพยากร เนื้อหา และ Android
ไฟล์ Manifest หรือไฟล์อื่นๆ ที่ไม่ใช่ไฟล์ DEX หรือไลบรารีแบบเนทีฟ
ที่อยู่ในโฟลเดอร์ lib/
การยืนยันความโปร่งใสของโค้ดจะใช้เพื่อวัตถุประสงค์ในการตรวจสอบโดย นักพัฒนาซอฟต์แวร์และผู้ใช้ปลายทางที่ต้องการ ให้แน่ใจว่าโค้ดที่กำลังเรียกใช้อยู่ตรงกัน โค้ดที่นักพัฒนาแอปสร้างและรับรองในตอนต้น
ข้อจำกัดที่ทราบ
อาจมีบางกรณีที่ไม่ส��มารถใช้ความโปร่งใสของโค้ดได้ ดังนี้
- แอปที่ระบุ
sharedUserId
ในไฟล์ Manifest ใบสมัครดังกล่าวอาจแชร์ขั้นตอนของตนกับ กับแอปพลิเคชันอื่นๆ ซึ่งทำให้ยากต่อการรับประกันเกี่ยวกับ โค้ดที่กำลังเรียกใช้อยู่ - แอปที่ใช้การป้องกันการปลอมแปลงหรือบริการอื่นๆ ที่ทำการเปลี่ยนแปลงโค้ด หลังจากสร้างไฟล์ความโปร่งใสของโค้ดแล้ว จะทำให้ความโปร่งใสของโค้ด การยืนยันไม่สำเร็จ
- แอปที่ใช้ Multidex เดิมในระดับ API ต่ำกว่า 21 (Android 5.0) และใช้ โมดูลฟีเจอร์ ความโปร่งใสของโค้ดจะยังคงทำงานต่อไปเมื่อแอป ที่ติดตั้งโดย Google Play ในอุปกรณ์ Android 5.0 ขึ้นไป ความโปร่งใสของโค้ดจะ ปิดใช้งานในระบบปฏิบัติการเวอร์ชันเก่า
วิธีเพิ่มความโปร่งใสของโค้ด
ก่อนที่จะเพิ่มความโปร่งใสของโค้ดลงในแอปได้ โปรดตรวจสอบว่าคุณมี คู่คีย์สาธารณะและส่วนตัวที่คุณใช้สำหรับการรับรองความโปร่งใสของโค้ดได้ ช่วงเวลานี้ ควรเป็นคีย์ที่ไม่ซ้ำกันซึ่งแตกต่างจากคีย์ App Signing ที่คุณใช้ สำหรับ Play App Signing และต้องเก็บรักษาไว้อย่างปลอดภัยและไม่เคยแชร์กับภายนอก องค์กรของคุณ
หากไม่มีคีย์ ให้ทำตามวิธีการในลงนามแอป เพื่อสร้างบันทึกบนเครื่อง ความโปร่งใสของโค้ดใช้มาตรฐาน ไฟล์คีย์สโตร์ ดังนั้นแม้ว่าคำแนะนำจะมีไว้สำหรับ App Signing ก็ตาม แต่การสร้างคีย์ แบบเดียวกัน
การใช้ปลั๊กอิน Android Gradle
การรองรับความโปร่งใสของโค้ดต้องใช้ปลั๊กอิน Android Gradle เวอร์ชัน 7.1.0-alpha03
หรือรุ่นที่ใหม่กว่า หากต้องการกำหนดค่าคีย์ที่ใช้สำหรับการรับรองความโปร่งใสของโค้ด ให้เพิ่มแอตทริบิวต์
ติดตามในการบล็อก bundle
ดึงดูด
// In your app module's build.gradle file: android { ... bundle { codeTransparency { signing { keyAlias = "ALIAS" keyPassword = "PASSWORD" storeFile = file("path/to/keystore") storePassword = "PASSWORD" } } ... } }
Kotlin
// In your app module's build.gradle.kts file: android { ... bundle { codeTransparency { signing { keyAlias = "ALIAS" keyPassword = "PASSWORD" storeFile = file("path/to/keystore") storePassword = "PASSWORD" } } ... } }
คีย์ที่ใช้ต้องเป็นคีย์ที่คุณจะใช้สำหรับความโปร่งใสของโค้ดเท่านั้น ไม่ใช่คีย์ App Signing ที่ Play App Signing ใช้
กำลังใช้ bundletool
ในบรรทัดคำสั่ง
การรองรับความโปร่งใสของโค้ดต้องใช้ Bundletool เวอร์ชัน 1.7.0 ขึ้นไปซึ่งคุณ ดาวน์โหลดจาก GitHub ได้
เรียกใช้คำสั่งต่อไปนี้เพื่อเพิ่มความโปร่งใสของโค้ดลงใน Android App Bundle คีย์ที่ใช้ต้องเป็นคีย์ที่คุณจะใช้สำหรับความโปร่งใสของโค้ดเท่านั้น ไม่ใช่คีย์ App Signing ที่ Play App Signing ใช้
bundletool add-transparency \
--bundle=/MyApp/my_app.aab \
--output=/MyApp/my_app_with_transparency.aab \
--ks=/MyApp/keystore.jks \
--ks-pass=file:/MyApp/keystore.pwd \
--ks-key-alias=MyKeyAlias \
--key-pass=file:/MyApp/key.pwd
หรือถ้าต้องการใช้เครื่องมือรับรองของคุณเอง คุณสามารถใช้ Bundletool หากต้องการสร้างไฟล์ความโปร่งใสของโค้ดที่ไม่มีการรับรอง โปรดลงชื่อเข้าใช้แยกต่างหาก และแทรกลายเซ็นลงในแพ็กเกจ
# Generate code transparency file
bundletool add-transparency \
--mode=generate_code_transparency_file \
--bundle=/MyApp/my_app.aab \
--output=/MyApp/code_transparency_file.jwt \
--transparency-key-certificate=/MyApp/transparency.cert
# Add code transparency signature to the bundle
bundletool add-transparency \
--mode=inject_signature \
--bundle=/MyApp/my_app.aab \
--output=/MyApp/my_app_with_transparency.aab \
--transparency-key-certificate=/MyApp/transparency.cert \
--transparency-signature=/MyApp/signature
ยืนยันความโปร่งใสของโค้ดของแอป
การยืนยันโค้ดกับความโปร่งใสของโค้ดทำได้หลายวิธี ทั้งนี้ ขึ้นอยู่กับว่าคุณติดตั้ง APK บนอุปกรณ์ Android หรือ ดาวน์โหลดมายังคอมพิวเตอร์ของคุณ
การใช้ Bundletool เพื่อตรวจสอบชุด App Bundle หรือ APK
คุณใช้ Bundletool เพื่อยืนยันความโปร่งใสของโค้ดได้ใน App Bundle หรือ APK
ตั้งค่า ใช้คำสั่ง check-transparency
เพื่อพิมพ์ลายนิ้วมือของใบรับรองสาธารณะ
# For checking a bundle:
bundletool check-transparency \
--mode=bundle \
--bundle=/MyApp/my_app_with_transparency.aab
No APK present. APK signature was not checked.
Code transparency signature is valid. SHA-256 fingerprint of the code transparency key certificate (must be compared with the developer's public key manually): 01 23 45 67 89 AB CD EF ..
Code transparency verified: code related file contents match the code transparency file.
# For checking a ZIP containing app's APK splits:
bundletool check-transparency \
--mode=apk \
--apk-zip=/MyApp/my_app_with_transparency.zip
APK signature is valid. SHA-256 fingerprint of the apk signing key certificate (must be compared with the developer's public key manually): 02 34 E5 98 CD A7 B2 12 ..
Code transparency signature is valid. SHA-256 fingerprint of the code transparency key certificate (must be compared with the developer's public key manually): 01 23 45 67 89 AB CD EF ..
Code transparency verified: code related file contents match the code transparency file.
คุณสามารถเลือกระบุใบรับรองสาธารณะที่ต้องการยืนยัน Bundle หรือ APK ที่ตั้งค่า คุณจะได้ไม่ต้องเปรียบเทียบแฮช ด้วยตนเอง:
bundletool check-transparency \
--mode=bundle \
--bundle=/MyApp/my_app_with_transparency.aab \
--transparency-key-certificate=/MyApp/transparency.cert
No APK present. APK signature was not checked.
Code transparency signature verified for the provided code transparency key certificate.
Code transparency verified: code related file contents match the code transparency file.
bundletool check-transparency \
--mode=apk \
--apk-zip=/MyApp/my_app_with_transparency.zip \
--apk-signing-key-certificate=/MyApp/apk.cert \
--transparency-key-certificate=/MyApp/transparency.cert
APK signature verified for the provided apk signing key certificate.
Code transparency signature verified for the provided code transparency key certificate.
Code transparency verified: code related file contents match the code transparency file.
การใช้ Bundletool เพื่อตรวจสอบแอปที่ติดตั้งในอุปกรณ์
ในการตรวจสอบแอปที่ติดตั้งในอุปกรณ์ Android ให้ตรวจสอบว่า อุปกรณ์เชื่อมต่อกับคอมพิวเตอร์ผ่าน ADB และออกคำสั่งต่อไปนี้
bundletool check-transparency \
--mode=connected_device \
--package-name="com.my.app"
APK signature is valid. SHA-256 fingerprint of the apk signing key certificate (must be compared with the developer's public key manually): 02 34 E5 98 CD A7 B2 12 ..
Code transparency signature is valid. SHA-256 fingerprint of the code transparency key certificate (must be compared with the developer's public key manually): 01 23 45 67 89 AB CD EF ..
Code transparency verified: code related file contents match the code transparency file.
การตรวจสอบความโปร่งใสของอุปกรณ์ที่เชื่อมต่อยังเลือกยืนยันลายเซ็นได้ด้วย กับคีย์สาธารณะที่คุณระบุ
bundletool check-transparency \
--mode=connected-device \
--package-name="com.my.app" \
--apk-signing-key-certificate=/MyApp/apk.cert \
--transparency-key-certificate=/MyApp/transparency.cert
APK signature verified for the provided apk signing key certificate.
Code transparency signature verified for the provided code transparency key certificate.
Code transparency verified: code related file contents match the code transparency file.