ความโปร่งใสของโค้ดสำหรับ App Bundle

ความโปร่งใสของโค้ดเป็นกลไกการเซ็นโค้ดและการยืนยันที่ไม่บังคับสำหรับ แอปที่เผยแพร่ด้วย 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.