ฟีเจอร์

จัดทุกอย่างให้เป็นระเบียบอยู่เสมอด้วยคอลเล็กชัน บันทึกและจัดหมวดหมู่เนื้อหาตามค่ากำหนดของคุณ

หน้านี้ประกอบด้วยข้อมูลเกี่ยวกับคุณสมบัติการเข้ารหัสของ Keystore ใน Android 6.0 ขึ้นไป

การเข้ารหัสลับเบื้องต้น

Keystore มีประเภทของการดำเนินการดังต่อไปนี้:

  • การสร้างคีย์
  • นำเข้าและส่งออกคีย์แบบอสมมาตร (ไม่มีการตัดคีย์)
  • นำเข้าคีย์ดิบสมมาตร (ไม่มีการตัดคีย์)
  • การเข้ารหัสและการถอดรหัสแบบไม่สมมาตรด้วยโหมดการเติมที่เหมาะสม
  • การเซ็นชื่อแบบอสมมาตรและการตรวจสอบด้วยโหมดย่อยและการเติมที่เหมาะสม
  • การเข้ารหัสและการถอดรหัสแบบสมมาตรในโหมดที่เหมาะสม รวมถึงโหมด AEAD
  • การสร้างและการตรวจสอบรหัสรับรองความถูกต้องของข้อความแบบสมมาตร

องค์ประกอบของโปรโตคอล เช่น วัตถุประสงค์ โหมด และช่องว่างภายใน ตลอดจน ข้อจำกัดในการควบคุมการเข้าถึง จะถูกระบุเมื่อมีการสร้างหรือนำเข้าคีย์และเชื่อมโยงกับคีย์อย่างถาวร เพื่อให้แน่ใจว่าคีย์จะไม่สามารถใช้งานได้ในลักษณะอื่นใด

นอกเหนือจากรายการด้านบนแล้ว ยังมีบริการอีกหนึ่งบริการที่ Keymaster มอบให้ แต่ไม่ได้เปิดเผยเป็น API: การสร้างหมายเลขสุ่ม ใช้เป็นการภายในสำหรับการสร้างคีย์ Initialization Vectors (IVs) การขยายแบบสุ่ม และองค์ประกอบอื่นๆ ของโปรโตคอลที่ปลอดภัยที่ต้องใช้การสุ่ม

พื้นฐานที่จำเป็น

การใช้งาน Keymaster ทั้งหมดให้:

  • RSA
    • รองรับคีย์ 2048, 3072 และ 4096 บิต
    • รองรับเลขชี้กำลังสาธารณะ F4 (2^16+1)
    • โหมดการเติมสำหรับการลงนาม RSA:
      • RSASSA-PSS ( PaddingMode::RSA_PSS )
      • RSASSA-PKCS1-v1_5 ( PaddingMode::RSA_PKCS1_1_5_SIGN )
    • โหมดไดเจสต์สำหรับการลงนาม RSA:
      • SHA-256
    • โหมดการแพ็ดดิ้งสำหรับการเข้ารหัส/ถอดรหัส RSA:
      • Unpadded
      • RSAES-OAEP ( PaddingMode::RSA_OAEP )
      • RSAES-PKCS1-v1_5 ( PaddingMode::RSA_PKCS1_1_5_ENCRYPT )
  • ECDSA
    • รองรับการรองรับคีย์ 224, 256, 384 และ 521 บิต โดยใช้เส้นโค้ง NIST P-224, P-256, P-384 และ P-521 ตามลำดับ
    • โหมดไดเจสต์สำหรับ ECDSA:
      • ไม่มีไดเจสต์ (เลิกใช้แล้ว จะถูกลบออกในอนาคต)
      • SHA-256
  • AES
    • รองรับคีย์ 128 และ 256 บิต
    • CBC , CTR, ECB และ GCM การใช้งาน GCM ไม่อนุญาตให้ใช้แท็กที่เล็กกว่า 96 บิตหรือความยาว nonce อื่นที่ไม่ใช่ 96 บิต
    • โหมด Padding PaddingMode::NONE และ PaddingMode::PKCS7 รองรับโหมด CBC และ ECB การเข้ารหัสในโหมด CBC หรือ ECB จะล้มเหลวหากอินพุตไม่ใช่ขนาดบล็อกหลายขนาด
  • HMAC SHA-256 ที่มีขนาดคีย์สูงสุดอย่างน้อย 32 ไบต์

ขอแนะนำ SHA1 และสมาชิกอื่นๆ ของตระกูล SHA2 (SHA-224, SHA384 และ SHA512) สำหรับการใช้งาน Keymaster Keystore จัดเตรียมไว้ในซอฟต์แวร์หากฮาร์ดแวร์ Keymaster ไม่ได้จัดเตรียมไว้

เบื้องต้นบางตัวยังแนะนำสำหรับการทำงานร่วมกันกับระบบอื่นๆ:

  • ขนาดคีย์ที่เล็กลงสำหรับ RSA
  • เลขชี้กำลังสาธารณะโดยพลการสำหรับ RSA

ระบบควบคุมการเข้าออกด้วยกุญแจ

คีย์ที่ใช้ฮาร์ดแวร์ที่ไม่สามารถดึงออกจากอุปกรณ์ไม่ได้ให้ความปลอดภัยมากนักหากผู้โจมตีสามารถใช้งานได้ตามต้องการ (แม้ว่าจะปลอดภัยกว่าคีย์ที่ สามารถ กรองออกได้) ดังนั้นจึงเป็นเรื่องสำคัญที่ Keystore จะบังคับใช้การควบคุมการเข้าถึง

การควบคุมการเข้าถึงถูกกำหนดให้เป็น "รายการการให้สิทธิ์" ของคู่แท็ก/ค่า แท็กการให้สิทธิ์เป็นจำนวนเต็ม 32 บิต และค่ามีหลายประเภท อาจมีแท็กบางแท็กซ้ำเพื่อระบุค่าหลายค่า มีการระบุแท็กซ้ำใน เอกสารสำหรับแท็ก หรือไม่ เมื่อมีการสร้างคีย์ ผู้เรียกจะระบุรายการการอนุญาต การนำคีย์มาสเตอร์ไปใช้ใน Keystore จะแก้ไขรายการเพื่อระบุข้อมูลเพิ่มเติม เช่น คีย์มีการป้องกันการย้อนกลับหรือไม่ และส่งคืนรายการการให้สิทธิ์ "สุดท้าย" ที่เข้ารหัสลงใน Blob ของคีย์ที่ส่งคืน ความพยายามในการใช้คีย์สำหรับการดำเนินการเข้ารหัสใด ๆ จะล้มเหลวหากมีการแก้ไขรายการการให้สิทธิ์ขั้นสุดท้าย

สำหรับ Keymaster 2 และรุ่นก่อนหน้า ชุดของแท็กที่เป็นไปได้ถูกกำหนดในการแจงนับ keymaster_authorization_tag_t และได้รับการแก้ไขอย่างถาวร (แม้ว่าจะสามารถขยายได้) ชื่อนำหน้าด้วย KM_TAG รหัสแท็กสี่บิตบนสุดใช้เพื่อระบุประเภท

Keymaster 3 เปลี่ยนคำนำหน้า KM_TAG เป็น Tag::

ประเภทที่เป็นไปได้ ได้แก่ :

ENUM : ค่าของแท็กจำนวนมากถูกกำหนดในการแจงนับ ตัวอย่างเช่น ค่าที่เป็นไปได้ของ TAG::PURPOSE ถูกกำหนดใน enum keymaster_purpose_t

ENUM_REP : เหมือนกับ ENUM ยกเว้นว่าแท็กอาจถูกทำซ้ำในรายการการให้สิทธิ์ การทำซ้ำหมายถึงค่าที่ได้รับอนุญาตหลายค่า ตัวอย่างเช่น คีย์เข้ารหัสน่าจะมี KeyPurpose::ENCRYPT และ KeyPurpose::DECRYPT

UINT : จำนวนเต็ม 32 บิตที่ไม่ได้ลงนาม ตัวอย่าง: TAG::KEY_SIZE

UINT_REP : เหมือนกับ UINT ยกเว้นว่าแท็กอาจถูกทำซ้ำในรายการการให้สิทธิ์ การทำซ้ำหมายถึงค่าที่ได้รับอนุญาตหลายค่า

ULONG : จำนวนเต็มที่ไม่ได้ลงนาม 64 บิต ตัวอย่าง: TAG::RSA_PUBLIC_EXPONENT

ULONG_REP : เหมือนกับ ULONG ยกเว้นว่าแท็กสามารถทำซ้ำได้ในรายการการให้สิทธิ์ การทำซ้ำหมายถึงค่าที่ได้รับอนุญาตหลายค่า

DATE : ค่าวันที่/เวลา แสดงเป็นมิลลิวินาทีตั้งแต่วันที่ 1 มกราคม 1970 ตัวอย่าง: TAG::PRIVKEY_EXPIRE_DATETIME

BOOL : จริงหรือเท็จ แท็กประเภท BOOL จะถือว่า "เท็จ" หากไม่มีแท็กและ "จริง" หากมี ตัวอย่าง: TAG::ROLLBACK_RESISTANT

BIGNUM : จำนวนเต็มความยาวโดยพลการ แสดงเป็นอาร์เรย์ไบต์ในลำดับ big-endian ตัวอย่าง: TAG::RSA_PUBLIC_EXPONENT

BYTES : ลำดับของไบต์ ตัวอย่าง: TAG::ROOT_OF_TRUST

ฮาร์ดแวร์กับการบังคับใช้ซอฟต์แวร์

การใช้งานฮาร์ดแวร์ที่ปลอดภัยบางรายการไม่ได้มีคุณสมบัติเหมือนกัน เพื่อสนับสนุนแนวทางที่หลากหลาย Keymaster ได้แยกความแตกต่างระหว่างการบังคับใช้การควบคุมการเข้าถึงโลกที่ปลอดภัยและไม่ปลอดภัย หรือการบังคับใช้ฮาร์ดแวร์และซอฟต์แวร์ ตามลำดับ

การใช้งานทั้งหมด:

  • บังคับใช้การจับคู่แบบตรงทั้งหมด (ไม่บังคับใช้) ของการอนุญาตทั้งหมด รายการการให้สิทธิ์ใน key blobs ตรงกับการอนุญาตที่ส่งคืนระหว่างการสร้างคีย์ ซึ่งรวมถึงการสั่งซื้อด้วย ไม่ตรงกันทำให้เกิดการวินิจฉัยข้อผิดพลาด
  • ประกาศการให้สิทธิ์ที่มีค่าความหมายถูกบังคับใช้

กลไก API สำหรับการประกาศการอนุญาตที่บังคับใช้กับฮาร์ดแวร์อยู่ในโครงสร้าง keymaster_key_characteristics_t มันแบ่งรายการการให้สิทธิ์ออกเป็นสองรายการย่อย hw_enforced และ sw_enforced ฮาร์ดแวร์ที่ปลอดภัยมีหน้าที่กำหนดค่าที่เหมาะสมในแต่ละค่า โดยพิจารณาจากสิ่งที่สามารถบังคับใช้ได้

นอกจากนี้ Keystore ยังใช้การบังคับใช้ซอฟต์แวร์ตามการอนุญาต ทั้งหมด ไม่ว่าพวกเขาจะบังคับใช้โดยฮาร์ดแวร์ที่ปลอดภัยหรือไม่ก็ตาม

ตัวอย่างเช่น พิจารณาการใช้งานบน TrustZone ที่ไม่สนับสนุนการหมดอายุของคีย์ คีย์ที่มีวันหมดอายุยังคงสร้างได้ รายการการให้สิทธิ์ของคีย์นั้นจะรวมแท็ก TAG::ORIGINATION_EXPIRE_DATETIME พร้อมวันหมดอายุ คำขอไปยัง Keystore สำหรับคุณลักษณะคีย์จะพบแท็กนี้ในรายการ sw_enforced และฮาร์ดแวร์ที่ปลอดภัยจะไม่บังคับใช้ข้อกำหนดการหมดอายุ อย่างไรก็ตาม ความพยายามที่จะใช้คีย์หลังจากหมดอายุจะถูกปฏิเสธโดย Keystore

หากอุปกรณ์ได้รับการอัปเกรดด้วยฮาร์ดแวร์ที่ปลอดภัยซึ่งรองรับการหมดอายุ คำขอคุณลักษณะคีย์จะพบ TAG::ORIGINATION_EXPIRE_DATETIME ในรายการ hw_enforced และการพยายามใช้คีย์หลังจากหมดอายุจะล้มเหลว แม้ว่าที่เก็บคีย์จะถูกโค่นล้มหรือข้าม .

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการพิจารณาว่าคีย์ได้รับการสนับสนุนจากฮาร์ดแวร์หรือไม่ โปรดดูที่ การรับรองคีย์

การอนุญาตการสร้างข้อความเข้ารหัสลับ

แท็กต่อไปนี้ใช้เพื่อกำหนดลักษณะการเข้ารหัสของการดำเนินการโดยใช้คีย์ที่เกี่ยวข้อง: TAG::ALGORITHM TAG::KEY_SIZE , TAG::BLOCK_MODE , TAG::PADDING , TAG::CALLER_NONCE และ TAG::DIGEST

TAG::PADDING , TAG::DIGEST และ PaddingMode::BLOCK_MODE สามารถทำซ้ำได้ ซึ่งหมายความว่าหลายค่าอาจเชื่อมโยงกับคีย์เดียว และค่าที่จะใช้จะถูกระบุในเวลาดำเนินการ

วัตถุประสงค์

คีย์มีชุดวัตถุประสงค์ที่เกี่ยวข้อง ซึ่งแสดงเป็นรายการการให้สิทธิ์อย่างน้อยหนึ่งรายการพร้อมแท็ก TAG::PURPOSE ซึ่งกำหนดวิธีการใช้งาน วัตถุประสงค์คือ:

  • KeyPurpose::ENCRYPT
  • KeyPurpose::DECRYPT
  • KeyPurpose::SIGN
  • KeyPurpose::VERIFY

คีย์ใดๆ สามารถมีชุดย่อยของวัตถุประสงค์เหล่านี้ได้ โปรดทราบว่าชุดค่าผสมบางตัวสร้างปัญหาด้านความปลอดภัย ตัวอย่างเช่น คีย์ RSA ที่สามารถใช้ได้ทั้งเข้ารหัสและเซ็นชื่อ ช่วยให้ผู้โจมตีสามารถโน้มน้าวให้ระบบถอดรหัสข้อมูลตามอำเภอใจเพื่อสร้างลายเซ็นได้

นำเข้าและส่งออก

Keymaster รองรับการส่งออกกุญแจสาธารณะเท่านั้น ในรูปแบบ X.509 และการนำเข้า:

  • คู่คีย์สาธารณะและส่วนตัวในรูปแบบ PKCS#8 ที่เข้ารหัส DER โดยไม่ต้องเข้ารหัสโดยใช้รหัสผ่าน
  • ปุ่มสมมาตรเป็นไบต์ดิบ

เพื่อให้แน่ใจว่าคีย์ที่นำเข้าสามารถแยกแยะได้จากคีย์ที่สร้างอย่างปลอดภัย TAG::ORIGIN จะรวมอยู่ในรายการการให้สิทธิ์คีย์ที่เหมาะสม ตัวอย่างเช่น หากคีย์ถูกสร้างขึ้นในฮาร์ดแวร์ที่ปลอดภัย TAG::ORIGIN ที่มีค่า KeyOrigin::GENERATED จะถูกพบในรายการคุณสมบัติของคีย์ hw_enforced ในขณะที่คีย์ที่นำเข้าไปยังฮาร์ดแวร์ที่ปลอดภัยจะมีค่า KeyOrigin::IMPORTED

การตรวจสอบผู้ใช้

การใช้งาน Secure Keymaster จะไม่ใช้การพิสูจน์ตัวตนผู้ใช้ แต่ขึ้นอยู่กับแอปที่เชื่อถือได้อื่นๆ สำหรับอินเทอร์เฟซที่แอปเหล่านี้นำไปใช้ โปรดดู หน้า Gatekeeper

ข้อกำหนดการตรวจสอบสิทธิ์ผู้ใช้ถูกระบุผ่านแท็กสองชุด ชุดแรกระบุว่าผู้ใช้รายใดสามารถใช้กุญแจได้:

  • TAG::ALL_USERS ระบุว่าคีย์นี้ใช้งานได้โดยผู้ใช้ทุกคน หากมี TAG::USER_ID และ TAG::USER_SECURE_ID จะไม่ปรากฏ
  • TAG::USER_ID มีค่าตัวเลขที่ระบุ ID ของผู้ใช้ที่ได้รับอนุญาต โปรดทราบว่านี่คือ ID ผู้ใช้ Android (สำหรับผู้ใช้หลายคน) ไม่ใช่ UID ของแอปพลิเคชัน และบังคับใช้โดยซอฟต์แวร์ที่ไม่ปลอดภัยเท่านั้น หากมี TAG::ALL_USERS จะไม่ปรากฏ
  • TAG::USER_SECURE_ID มีค่าตัวเลข 64 บิตซึ่งระบุ ID ผู้ใช้ที่ปลอดภัยซึ่งระบุไว้ในโทเค็นการตรวจสอบสิทธิ์ที่ปลอดภัยเพื่อปลดล็อกการใช้คีย์ หากทำซ้ำ อาจใช้คีย์ได้หากมีการระบุค่าใดๆ ในโทเค็นการตรวจสอบสิทธิ์ที่ปลอดภัย

ชุดที่สองระบุว่าต้องตรวจสอบสิทธิ์ผู้ใช้หรือไม่และเมื่อใด หากไม่มีแท็กเหล่านี้ แต่มี TAG::USER_SECURE_ID จำเป็นต้องมีการตรวจสอบสิทธิ์สำหรับการใช้คีย์ทุกครั้ง

  • NO_AUTHENTICATION_REQUIRED ระบุว่าไม่จำเป็นต้องมีการตรวจสอบสิทธิ์ผู้ใช้ แม้ว่าคีย์จะยังคงใช้งานได้โดยแอปที่ทำงานเป็นผู้ใช้ที่ระบุโดย TAG::USER_ID เท่านั้น
  • TAG::AUTH_TIMEOUT เป็นค่าตัวเลขที่ระบุว่าการตรวจสอบสิทธิ์ผู้ใช้มีความสดใหม่เพียงใดในการอนุญาตการใช้คีย์ สิ่งนี้ใช้ได้กับการดำเนินการคีย์ส่วนตัว/ความลับเท่านั้น การดำเนินการคีย์สาธารณะไม่จำเป็นต้องมีการตรวจสอบสิทธิ์ ระยะหมดเวลาไม่รีบูตข้าม หลังจากรีบูต คีย์ทั้งหมดจะ "ไม่เคยตรวจสอบสิทธิ์" ระยะหมดเวลาอาจถูกตั้งค่าเป็นค่ามากเพื่อระบุว่าต้องมีการตรวจสอบสิทธิ์หนึ่งครั้งต่อการบู๊ต (2^32 วินาทีคือ ~136 ปี สันนิษฐานว่าอุปกรณ์ Android ถูกรีบูตบ่อยกว่านั้น)

การผูกมัดลูกค้า

การเชื่อมโยงไคลเอ็นต์ การเชื่อมโยงของคีย์กับแอปพลิเคชันไคลเอ็นต์เฉพาะ ทำได้โดยใช้รหัสไคลเอ็นต์ที่ไม่บังคับและข้อมูลไคลเอ็นต์ที่ไม่บังคับบางส่วน ( TAG::APPLICATION_ID และ TAG::APPLICATION_DATA ตามลำดับ) ที่เก็บคีย์จะถือว่าค่าเหล่านี้เป็น blobs ทึบแสง เพื่อให้แน่ใจว่ามีการนำเสนอ blobs เดียวกันระหว่างการสร้าง/นำเข้าคีย์สำหรับการใช้งานทุกครั้งและเป็นแบบไบต์ต่อไบต์เหมือนกัน Keymaster จะไม่ส่งคืนข้อมูลการเชื่อมโยงไคลเอ็นต์ ผู้โทรต้องรู้ก่อนจึงจะใช้กุญแจได้

ฟีเจอร์นี้ไม่เปิดเผยต่อแอปพลิเคชัน

วันหมดอายุ

Keystore รองรับการจำกัดการใช้คีย์ตามวันที่ การเริ่มต้นความถูกต้องของคีย์และการหมดอายุของคีย์สามารถเชื่อมโยงกับคีย์ได้ และ Keymaster ปฏิเสธที่จะดำเนินการคีย์หากวันที่/เวลาปัจจุบันอยู่นอกช่วงที่ถูกต้อง ช่วงความถูกต้องของคีย์ระบุด้วยแท็ก TAG::ACTIVE_DATETIME , TAG::ORIGINATION_EXPIRE_DATETIME และ TAG::USAGE_EXPIRE_DATETIME ความแตกต่างระหว่าง "ต้นกำเนิด" และ "การใช้งาน" ขึ้นอยู่กับว่าคีย์ถูกใช้เพื่อ "สร้าง" ไซเฟอร์เท็กซ์/ลายเซ็น/ฯลฯ ใหม่ หรือเพื่อ "ใช้" ไซเฟอร์เท็กซ์/ลายเซ็น/อื่นๆ ที่มีอยู่ โปรดทราบว่าความแตกต่างนี้ไม่ได้เปิดเผยต่อแอปพลิเคชัน

แท็ก TAG::ACTIVE_DATETIME , TAG::ORIGINATION_EXPIRE_DATETIME และ TAG::USAGE_EXPIRE_DATETIME เป็นตัวเลือก หากไม่มีแท็ก จะถือว่าคีย์ที่เป็นปัญหาสามารถใช้เพื่อถอดรหัส/ตรวจสอบข้อความได้เสมอ

เนื่องจากโลกที่ไม่ปลอดภัยเป็นผู้ให้เวลานาฬิกาแขวน จึงไม่น่าเป็นไปได้ที่แท็กที่เกี่ยวข้องกับการหมดอายุจะอยู่ในรายการที่บังคับใช้กับฮาร์ดแวร์ การบังคับใช้ฮาร์ดแวร์ในการหมดอายุจะทำให้โลกปลอดภัยต้องได้รับเวลาและข้อมูลที่เชื่อถือได้ เช่น ผ่านโปรโตคอลการตอบสนองต่อความท้าทายด้วยเซิร์ฟเวอร์เวลาระยะไกลที่เชื่อถือได้

รากของการผูกมัดความไว้วางใจ

ที่เก็บคีย์ต้องการคีย์ที่จะผูกไว้กับรูทของความไว้วางใจ ซึ่งเป็นบิตสตริงที่จัดเตรียมให้กับฮาร์ดแวร์ที่ปลอดภัยของคีย์มาสเตอร์ในระหว่างการเริ่มต้นระบบ โดยเฉพาะอย่างยิ่งโดย bootloader บิตสตริงนี้เชื่อมโยงกับทุกคีย์ที่จัดการโดย Keymaster อย่างเข้ารหัสลับ

รากของความไว้วางใจประกอบด้วยคีย์สาธารณะที่ใช้ตรวจสอบลายเซ็นบนอิมเมจสำหรับบูตและสถานะการล็อกของอุปกรณ์ หากเปลี่ยนคีย์สาธารณะเพื่ออนุญาตให้ใช้อิมเมจระบบอื่นหรือหากสถานะล็อคเปลี่ยนไป คีย์ที่ป้องกันด้วยคีย์มาสเตอร์ที่สร้างโดยระบบก่อนหน้าจะไม่สามารถใช้งานได้ เว้นแต่รูทของความเชื่อถือก่อนหน้านี้จะได้รับการกู้คืนและระบบ ที่ลงนามโดยคีย์นั้นถูกบูต เป้าหมายคือการเพิ่มมูลค่าของการควบคุมการเข้าถึงคีย์ที่บังคับใช้ด้วยซอฟต์แวร์โดยทำให้ระบบปฏิบัติการที่ติดตั้งโดยผู้โจมตีไม่สามารถใช้คีย์มาสเตอร์คีย์ได้

คีย์สแตนด์อโลน

ฮาร์ดแวร์ที่ปลอดภัยของ Keymaster บางตัวอาจเลือกที่จะจัดเก็บวัสดุของคีย์ไว้ภายในและส่งคืนที่จับ แทนที่จะใช้วัสดุของคีย์ที่เข้ารหัส หรืออาจมีกรณีอื่นๆ ที่คีย์ไม่สามารถใช้งานได้จนกว่าจะมีส่วนประกอบของระบบโลกที่ไม่ปลอดภัยหรือมีความปลอดภัย Keymaster HAL อนุญาตให้ผู้โทรร้องขอให้คีย์เป็นแบบ "สแตนด์อโลน" ผ่านแท็ก TAG::STANDALONE ซึ่งหมายความว่าไม่จำเป็นต้องใช้ทรัพยากรอื่นนอกจาก Blob และระบบ Keymaster ที่ทำงานอยู่ แท็กที่เกี่ยวข้องกับคีย์อาจถูกตรวจสอบเพื่อดูว่าคีย์เป็นแบบสแตนด์อโลนหรือไม่ ปัจจุบันมีการกำหนดค่าเพียงสองค่า:

  • KeyBlobUsageRequirements::STANDALONE
  • KeyBlobUsageRequirements::REQUIRES_FILE_SYSTEM

ฟีเจอร์นี้ไม่เปิดเผยต่อแอปพลิเคชัน

ความเร็ว

เมื่อสร้างขึ้น สามารถระบุความเร็วการใช้งานสูงสุดด้วย TAG::MIN_SECONDS_BETWEEN_OPS การใช้งาน TrustZone ปฏิเสธที่จะดำเนินการเข้ารหัสด้วยคีย์นั้น หากดำเนินการน้อยกว่า TAG::MIN_SECONDS_BETWEEN_OPS วินาทีก่อนหน้า

วิธีง่ายๆ ในการใช้ขีดจำกัดความเร็วคือตารางรหัสคีย์และการประทับเวลาที่ใช้ล่าสุด ตารางนี้อาจมีขนาดจำกัด แต่รองรับได้อย่างน้อย 16 รายการ ในกรณีที่ตารางเต็มและไม่สามารถอัปเดตหรือยกเลิกรายการได้ การใช้งานฮาร์ดแวร์ที่ปลอดภัย "ไม่ปลอดภัย" โดยเลือกที่จะปฏิเสธการดำเนินการคีย์ที่จำกัดความเร็วทั้งหมดจนกว่ารายการใดรายการหนึ่งจะหมดอายุ เป็นที่ยอมรับสำหรับรายการทั้งหมดที่จะหมดอายุเมื่อรีบูต

คีย์สามารถจำกัดการใช้งานได้ n ครั้งต่อการบู๊ตด้วย TAG::MAX_USES_PER_BOOT นอกจากนี้ยังต้องมีตารางติดตามซึ่งรองรับกุญแจอย่างน้อยสี่ดอกและยังล้มเหลวในความปลอดภัย โปรดทราบว่าแอปพลิเคชันจะไม่สามารถสร้างคีย์ที่จำกัดต่อการบูตได้ คุณลักษณะนี้จะไม่เปิดเผยผ่าน Keystore และสงวนไว้สำหรับการทำงานของระบบ

ฟีเจอร์นี้ไม่เปิดเผยต่อแอปพลิเคชัน

ตัวสร้างตัวเลขสุ่มการเพาะใหม่

เนื่องจากฮาร์ดแวร์ที่ปลอดภัยสร้างตัวเลขสุ่มสำหรับวัสดุหลักและ Initialization Vectors (IV) และเนื่องจากตัวสร้างหมายเลขสุ่มของฮาร์ดแวร์อาจไม่น่าเชื่อถืออย่างสมบูรณ์ Keymaster HAL จึงมีอินเทอร์เฟซเพื่อให้ลูกค้าสามารถจัดหาเอนโทรปีเพิ่มเติมซึ่งจะถูกผสมเป็นแบบสุ่ม ตัวเลขที่สร้างขึ้น

ใช้ตัวสร้างตัวเลขสุ่มของฮาร์ดแวร์เป็นแหล่งเมล็ดพันธุ์หลัก ข้อมูลเมล็ดพันธุ์ที่ให้ผ่าน API ภายนอกไม่สามารถเป็นแหล่งสุ่มเพียงแหล่งเดียวที่ใช้สำหรับการสร้างตัวเลข นอกจากนี้ การผสมที่ใช้ต้องแน่ใจว่าเอาต์พุตแบบสุ่มไม่สามารถคาดเดาได้หากแหล่งเมล็ดพันธุ์ใดแหล่งหนึ่งไม่สามารถคาดการณ์ได้

คุณลักษณะนี้ไม่เปิดเผยต่อแอปพลิเคชัน แต่ถูกใช้โดยเฟรมเวิร์ก ซึ่งให้เอนโทรปีเพิ่มเติมเป็นประจำ ซึ่งดึงมาจากอินสแตนซ์ Java SecureRandom ไปยังฮาร์ดแวร์ที่ปลอดภัย