ในโลกของการพัฒนาซอฟต์แวร์ แฮชของ Git commit มักเป็นสตริงตัวอักษรและตัวเลขแบบสุ่มที่ระบุการเปลี่ยนแปลงโค้ดอย่างเป็นเอกลักษณ์ อย่างไรก็ตาม นักพัฒนาบางคนพบความพึงพอใจในเชิงสุนทรียภาพกับ commit ที่มีแฮชที่มีความหมายหรือมีรูปแบบเฉพาะ นำไปสู่การสร้างเครื่องมือพิเศษเพื่อสร้างแฮชแบบ vanity เหล่านี้
วิธีการทำงานของ Vanity Hash
โค้ดที่แชร์กันแสดงให้เห็นถึงเครื่องมือที่เรียกว่า vanity.c ซึ่งจัดการข้อความเพื่อสร้างแฮช SHA-1 ที่มีคำนำหน้าเฉพาะ วิธีการนี้ชาญฉลาดแต่ตรงไปตรงมา - มันจัดการแต่ละคำในไฟล์ข้อความเป็นบิตทวิภาค สลับระหว่างรูปแบบตัวพิมพ์เดิมและรูปแบบตัวพิมพ์ใหญ่ของคำ โดยการลองใช้การสลับรูปแบบต่างๆ เหล่านี้อย่างเป็นระบบ โปรแกรมจะค้นหาเวอร์ชันข้อความที่สร้างแฮชที่ขึ้นต้นด้วยคำนำหน้าที่ต้องการ (ในกรณีนี้คือ 20250327)
ตามที่ผู้แสดงความคิดเห็นคนหนึ่งอธิบายไว้ วิธีนี้รักษารูปลักษณ์ของข้อความไว้ในขณะที่ให้ความสุ่มเพียงพอที่จะค้นหาแฮชที่ตรงกันในที่สุด:
หลังจากทดลองกับการหมุนเวียนเครื่องหมายวรรคตอน และการใช้ตัวพิมพ์ใหญ่แบบสุ่ม ผมก็นึกถึงไอเดียที่จะใช้แต่ละคำเป็นบิตและกำหนดให้เวอร์ชันดั้งเดิมของคำเป็น 0 และเวอร์ชันที่สลับเป็นตัวพิมพ์ใหญ่เป็น 1 จากนั้นก็ใช้ไฟล์ข้อความเป็นตัวนับและนับจาก 0 จนกว่าเราจะพบตัวนับที่แฮชเป็นคำนำหน้าแบบ vanity ที่เราต้องการ
ข้อกำหนดเฉพาะของเครื่องมือ Vanity Hash
- เป้าหมาย: คำนำหน้าแฮช SHA-1
- วิธีการ: การสลับการใช้ตัวพิมพ์ใหญ่ของคำ (ตัวอักษรตัวแรก)
- จำนวนความพยายามสูงสุด: 2^32 (~4.3 พันล้านรูปแบบ)
- ตัวอย่างคำนำหน้าเป้าหมาย: "20250327"
- ประสิทธิภาพ: ต้องการการวนซ้ำประมาณ 2 พันล้านครั้งสำหรับคำนำหน้า 8 หลัก
- ข้อจำกัด: แก้ไขเฉพาะไฟล์ข้อความ รักษารูปลักษณ์ภายนอกไว้
การประยุกต์ใช้อย่างสร้างสรรค์
การสนทนาในชุมชนเผยให้เห็นว่านักพัฒนาได้สร้าง vanity hash มาหลายปีแล้ว โดยบางคนใช้มันเพื่อเพิ่มความสนุกสนานในประวัติ commit ของพวกเขา ผู้แสดงความคิดเห็นคนหนึ่งพูดเล่นๆ ว่าผู้สมัครงานควรมี commit hash ที่สะกดคำเช่น deadbeef5, 0cafef00d และ 5ca1ab1e1 (อ่านว่า dead beef, café food และ scalable) วิธีการที่สนุกสนานนี้เปลี่ยนประวัติ commit ที่มักจะดูธรรมดาให้กลายเป็นสิ่งที่น่าจดจำและสนุกสนานมากขึ้น
นอกเหนือจากความสวยงามแล้ว เครื่องมือเหล่านี้ยังแสดงให้เห็นถึงหลักการพื้นฐานของฟังก์ชันแฮชและเทคนิคการใช้กำลังประมวลผลสูง การใช้งาน C สามารถลองได้ประมาณ 4.3 พันล้านรูปแบบ (2^32) ซึ่งเพียงพอสำหรับการค้นหาคำนำหน้า 8 ตัวอักษร สำหรับคำนำหน้าที่ยาวกว่านี้ จำเป็นต้องใช้พลังการประมวลผลที่มากขึ้นหรืออัลกอริทึมที่มีประสิทธิภาพมากขึ้น
ข้อจำกัดในทางปฏิบัติ
แม้ว่า vanity hash จะสนุก แต่ก็มีข้อจำกัดในทางปฏิบัติ ตัวอย่างในโค้ดต้องการการทำซ้ำประมาณ 2 พันล้านครั้งเพื่อค้นพบแฮช 8 หลักที่ถูกต้อง ซึ่งเป็นความพยายามในการคำนวณที่สำคัญสำหรับสิ่งที่เป็นเพียงการเปลี่ยนแปลงเชิงสุนทรียภาพ นอกจากนี้ เนื่องจาก SHA-1 ได้ถูกเลิกใช้เพื่อวัตถุประสงค์ด้านความปลอดภัยในหลายบริบท เทคนิคเหล่านี้จึงมีไว้เพื่อความบันเทิงมากกว่าการใช้งานด้านการเข้ารหัสในทางปฏิบัติ
นักพัฒนาบางคนได้ขยายแนวคิดนี้ โดยผู้แสดงความคิดเห็นคนหนึ่งได้กล่าวถึงเวอร์ชันแบบ multithreaded ที่สร้างขึ้นเมื่อประมาณสิบปีที่แล้วซึ่งทำงานกับไฟล์ไบนารีเช่น ZIP archives แสดงให้เห็นถึงความสนใจที่ยาวนานในเครื่องมือนักพัฒนาเฉพาะทางนี้
ความหลงใหลใน vanity hash สะท้อนให้เห็นถึงด้านที่สนุกสนานของวัฒนธรรมการเขียนโปรแกรม ที่แม้แต่องค์ประกอบที่เป็นประโยชน์ที่สุดของเครื่องมือพัฒนาก็สามารถกลายเป็นผืนผ้าใบสำหรับความคิดสร้างสรรค์และการปรับแต่งส่วนบุคคลได้
อ้างอิง: vanity.c