การบีบอัด

เอกสารนี้ใช้กับวิธีการต่อไปนี้ Update API (v4): threatListUpdates.fetch

เกี่ยวกับการบีบอัด

การบีบอัดเป็นคุณลักษณะหลักของ Safe Browsing API (v4) การบีบอัดช่วยลดความต้องการแบนด์วิดท์ได้อย่างมาก โดยเฉพาะอย่างยิ่งบนอุปกรณ์เคลื่อนที่ ซึ่งไม่สำคัญเท่าใดนัก ปัจจุบันเซิร์ฟเวอร์ Google Safe Browsing รองรับการบีบอัด Rice ทั้งนี้อาจมีการเพิ่มวิธีบีบอัดอื่นๆ ในอนาคต

การบีบอัดตั้งค่าโดยใช้ช่อง supportedCompressions และ CompressionType ไคลเอ็นต์ควรใช้ประเภทการบีบอัด RICE และ RAW Google Safe Browsing ใช้ประเภท COMPRESSION_TYPE_UNSPECIFIED เมื่อไม่ได้ตั้งค่าประเภทการบีบอัด (การบีบอัดข้อมูล RAW จะถูกแทนที่)

เซิร์ฟเวอร์ Google Safe Browsing จะใช้การบีบอัด HTTP มาตรฐานเพื่อบีบอัดการตอบกลับเพิ่มเติมโดยไม่คำนึงถึงประเภทการบีบอัดที่เลือก ตราบใดที่ไคลเอ็นต์ตั้งค่าส่วนหัวการบีบอัด HTTP ที่ถูกต้อง (ดูการบีบอัด HTTP ในบทความของ Wikipedia)

การบีบข้าว

ตามที่ได้กล่าวไว้ ปัจจุบันเซิร์ฟเวอร์ Google Safe Browsing รองรับการบีบอัด Rice (ดูบทความวิกิพีเดีย การเขียนโค้ดของ Golomb สำหรับการพูดคุยทั้งหมดเกี่ยวกับการเขียนโค้ดของ Golomb-Rice)

การบีบอัด/ยกเลิกการบีบอัด

ออบเจ็กต์ RiceDeltaEncoding แสดงข้อมูลที่เข้ารหัส Rice-Golomb และใช้เพื่อส่งดัชนีการลบที่บีบอัดหรือคำนำหน้าแฮช 4 ไบต์ที่บีบอัด (คำนำหน้าแฮชที่ยาวกว่า 4 ไบต์จะไม่ถูกบีบอัด และจะแสดงผลในรูปแบบข้อมูลดิบแทน)

สำหรับดัชนีนำออก รายการดัชนีจะถูกจัดเรียงจากน้อยไปมาก จากนั้นเข้ารหัสเดลต้าโดยใช้การเข้ารหัส RICE สำหรับการเพิ่มเติม คำนำหน้าแฮชแบบ 4 ไบต์จะได้รับการตีความใหม่เป็น uint32s แบบ Li-endian จากน้อยไปมาก จากนั้นแปลงค่าเดลต้าด้วยการเข้ารหัส RICE โปรดสังเกตความแตกต่างของรูปแบบแฮชระหว่างการบีบอัด RICE และ RAW: แฮชดิบคือไบต์ที่มีการจัดเรียงแบบพจนานุกรม ขณะที่แฮชของข้าวจะจัดเรียงแบบ uint32 ตามลำดับจากน้อยไปมาก (หลังการคลายการบีบอัด)

นั่นคือรายการจำนวนเต็ม [1, 5, 7, 13] จะเข้ารหัสเป็น 1 (ค่าแรก) และเดลต้า [4, 2, 6]

ค่าแรกจะจัดเก็บไว้ในช่อง firstValue และมีการเข้ารหัสเดลต้าโดยใช้โปรแกรมเปลี่ยนไฟล์ Golomb-Rice พารามิเตอร์ Rice k (ดูด้านล่าง) จะจัดเก็บไว้ใน riceParameters ช่อง numEntries มีจำนวนเดลต้าที่เข้ารหัสในตัวเข้ารหัสข้าว (3 ในตัวอย่างด้านบน ไม่ใช่ 4) ช่อง encodedData ประกอบด้วยเดลต้าที่เข้ารหัสจริง

โปรแกรมเปลี่ยนไฟล์/โปรแกรมถอดรหัส

ในเครื่องมือเข้ารหัส/ถอดรหัสข้าว ทุกๆ เดลต้า n จะได้รับการเข้ารหัสเป็น q และ r โดยที่ n = (q<<k) + r (หรือ, n = q * (2**k) + r) k เป็นค่าคงที่และพารามิเตอร์ของเครื่องมือเข้ารหัส/ถอดรหัสข้าว ค่าสำหรับ q และ r จะได้รับการเข้ารหัสในสตรีมบิตโดยใช้รูปแบบการเข้ารหัสที่แตกต่างกัน

ผลหาร q มีการเข้ารหัสแบบเอกภาค ตามด้วย 0 นั่นคือ 3 จะเข้ารหัสเป็น 1110, 4 เป็น 11110 และ 7 เป็น 11111110 ผลหาร q จะถอดรหัสก่อน

เศษของ r ถูกเข้ารหัสโดยใช้การเข้ารหัสไบนารีที่ตัดให้สั้นลง เขียนเฉพาะ k บิตของ r ที่มีนัยสำคัญน้อยที่สุด (และจึงอ่าน) จากสตรีมบิต ระบบจะถอดรหัส r ที่เหลือหลังจากถอดรหัส q

โปรแกรมเปลี่ยนไฟล์/เครื่องมือถอดรหัสบิต

โปรแกรมเปลี่ยนไฟล์ข้าวจะใช้โปรแกรมเปลี่ยนไฟล์/เครื่องมือถอดรหัสบิตหนึ่งที่สามารถนำไปต่อท้ายโปรแกรมเปลี่ยนไฟล์บิตได้ กล่าวคือเพื่อเข้ารหัสผลหาร q ที่อาจยาวเพียง 2 บิตเท่านั้น

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

เพิ่มบิตแล้ว BitEncrypter หลังจากเพิ่มบิต
[]
0 [00000000]
1 [00000010]
1 [00000110]
1,0,1 [00101110]
0,0,0 [00101110, 00000000]
1,1,0 [00101110, 00000110]