เอกสารนี้ใช้กับเมธอดต่อไปนี้ อัปเดต API (v4) threatListUpdates.fetch
เกี่ยวกับการบีบอัด
การบีบอัดเป็นฟีเจอร์หลักของ Safe Browsing API (v4) การบีบอัดช่วยลด ข้อกำหนดด้านแบนด์วิดท์ได้อย่างมาก ซึ่งมีความเกี่ยวข้องเป็นพิเศษ (แต่ไม่จำกัดเฉพาะ) สำหรับอุปกรณ์เคลื่อนที่ ปัจจุบันเซิร์ฟเวอร์ Google Safe Browsing รองรับการบีบอัดแบบ Rice ทั้งนี้ อาจมีการเพิ่มวิธีการบีบอัดอื่นๆ ในอนาคต
การบีบอัดจะตั้งค่าโดยใช้ฟิลด์ supportedCompressions และ CompressionType ลูกค้าควรใช้การบีบอัดประเภท RICE และ RAW การท่องเว็บอย่างปลอดภัยจะใช้ประเภท COMPRESSION_TYPE_UNSPECIFIED เมื่อไม่ได้ตั้งค่าประเภทการบีบอัด (ระบบจะแทนที่ด้วยการบีบอัด RAW)
เซิร์ฟเวอร์ Google Safe Browsing จะใช้การบีบอัด HTTP มาตรฐานเพื่อบีบอัดการตอบกลับเพิ่มเติมด้วย ไม่ว่าประเภทการบีบอัดที่เลือกจะเป็นอะไรก็ตาม ตราบใดที่ไคลเอ็นต์ตั้งค่าส่วนหัวการบีบอัด HTTP ที่ถูกต้อง (ดูบทความใน Wikipedia เรื่องการบีบอัด HTTP)
การบีบอัด Rice
ดังที่ได้กล่าวไว้ เซิร์ฟเวอร์ Safe Browsing รองรับการบีบอัดแบบ Rice ในปัจจุบัน (ดูบทความใน Wikipedia เรื่อง การเข้ารหัส Golomb เพื่อดูการอภิปรายเรื่องการเข้ารหัส Golomb-Rice แบบเต็ม)
การบีบอัด/การคลายการบีบอัด
ออบเจ็กต์ RiceDeltaEncoding แสดงถึงข้อมูลที่เข้ารหัส Rice-Golomb และใช้เพื่อส่งดัชนีการนำออกที่บีบอัดหรือ คำนำหน้าแฮช 4 ไบต์ที่บีบอัด (ระบบจะไม่บีบอัดคำนำหน้าแฮชที่ยาวกว่า 4 ไบต์ และจะแสดงในรูปแบบดิบแทน )
สำหรับดัชนีการนำออก ระบบจะจัดเรียงรายการดัชนีตามลำดับจากน้อยไปมาก แล้วเข้ารหัสเดลต้า โดยใช้การเข้ารหัส RICE สำหรับการเพิ่ม ระบบจะตีความคำนำหน้าแฮช 4 ไบต์ใหม่เป็น uint32 แบบ Little-Endian จัดเรียงตามลำดับจากน้อยไปมาก แล้วเข้ารหัสเดลต้าโดยใช้การเข้ารหัส RICE โปรดสังเกตความแตกต่างของรูปแบบแฮชระหว่างการบีบอัด RICE กับ RAW โดยแฮช RAW คือไบต์ที่จัดเรียงตามพจนานุกรม ส่วนแฮช Rice คือ uint32 ที่จัดเรียงจากน้อยไปมาก (หลังจากการคลายการบีบอัด)
กล่าวคือ รายการจำนวนเต็ม [1, 5, 7, 13] จะได้รับการเข้ารหัสเป็น 1 (ค่าแรก) และส่วนต่าง [4, 2, 6]
ระบบจะจัดเก็บค่าแรกในฟิลด์ firstValue
และเข้ารหัสเดลต้าโดยใช้ตัวเข้ารหัส Golomb-Rice
พารามิเตอร์ k ของ Rice (ดูด้านล่าง) จะจัดเก็บไว้ใน riceParameter ฟิลด์ numEntries
มีจำนวนเดลต้าที่เข้ารหัสในตัวเข้ารหัส Rice (3 ในตัวอย่างด้านบน ไม่ใช่ 4) ฟิลด์
encodedData
มีเดลต้าที่เข้ารหัสจริง
ตัวเข้ารหัส/ตัวถอดรหัส
ในตัวเข้ารหัส/ถอดรหัส Rice ระบบจะเข้ารหัสเดลต้า n เป็น q และ r โดยที่ n = (q<<k) + r (หรือ n = q * (2**k) + r) k เป็นค่าคงที่และพารามิเตอร์ของตัวเข้ารหัส/ถอดรหัส Rice ค่าสำหรับ q และ r จะได้รับการเข้ารหัสในบิตสตรีมโดยใช้รูปแบบการเข้ารหัสที่แตกต่างกัน
ส่วน q จะได้รับการเข้ารหัสในรูปแบบการเข้ารหัสแบบเอกภาคตามด้วย 0 กล่าวคือ 3 จะเข้ารหัสเป็น 1110, 4 เป็น 11110 และ 7 เป็น 11111110 ระบบจะถอดรหัสผลหาร q ก่อน
ส่วนที่เหลือ r จะได้รับการเข้ารหัสโดยใช้การเข้ารหัสไบนารีที่ตัดทอน ระบบจะเขียน (และอ่าน) เฉพาะ k บิตที่สำคัญน้อยที่สุด ของ r จากสตรีมบิต ส่วนที่เหลือ r จะได้รับการถอดรหัสหลังจากถอดรหัส q
ตัวเข้ารหัส/ถอดรหัสบิต
โปรแกรมเปลี่ยนไฟล์ Rice ใช้ตัวเข้ารหัส/ตัวถอดรหัสบิต ซึ่งสามารถต่อท้ายบิตเดียวกับตัวเข้ารหัสบิตได้ นั่นคือเพื่อเข้ารหัสผลหาร q ที่มีความยาวเพียง 2 บิต
ตัวเข้ารหัสบิตคือรายการไบต์ (8 บิต) โดยจะตั้งค่าบิตจากบิตที่มีนัยสำคัญต่ำสุดในไบต์แรกไปยังบิตที่มีนัยสำคัญสูงสุดในไบต์แรก หากไบต์มีบิตทั้งหมดตั้งค่าอยู่แล้ว ระบบจะผนวกไบต์ใหม่ (เริ่มต้นเป็น 0) ไว้ที่ท้ายรายการไบต์ หากไม่ได้ใช้ไบต์สุดท้าย อย่างเต็มที่ ระบบจะตั้งค่าบิตที่มีนัยสำคัญสูงสุดเป็น 0 ตัวอย่าง
เพิ่มบิตแล้ว | BitEncoder หลังจากเพิ่มบิต |
---|---|
[] | |
0 | [00000000] |
1 | [00000010] |
1 | [00000110] |
1,0,1 | [00101110] |
0,0,0 | [00101110, 00000000] |
1,1,0 | [00101110, 00000110] |