รหัสฮิลล์
เข้ารหัสและถอดรหัสฮิลล์ รหัสคลาสสิกแบบหลายตัวอักษรที่สร้างขึ้นบนพีชคณิตเชิงเส้น ตัวอักษรถูกจัดกลุ่มเป็นบล็อก แปลงเป็นเวกเตอร์ตัวเลข แล้วคูณด้วยเมทริกซ์กุญแจมอดูโล 26: การเข้ารหัสคือ C = K·P การถอดรหัสคือ P = K⁻¹·C เลือกกุญแจ 2×2 หรือ 3×3 ดูเมทริกซ์แบบสด ดีเทอร์มิแนนต์ของมัน และอินเวอร์สมอดูลาร์ของมัน แล้วติดตามการคำนวณทีละบล็อก ทุกอย่างทำงานในเบราว์เซอร์ของคุณ
กุญแจ (ตัวอักษร)
กุญแจคือตัวอักษร 4 ตัว (A=0 … Z=25) ที่เติมลงในเมทริกซ์ทีละแถว กุญแจ 2×2 เข้ารหัสตัวอักษรเป็นคู่ (ไดกราฟ)
ป้อนข้อความด้านบนเพื่อดูผลลัพธ์ที่นี่
เมทริกซ์กุญแจ
ตัวอักษรแต่ละบล็อกกลายเป็นเวกเตอร์ (A=0 … Z=25) และถูกคูณด้วยเมทริกซ์กุญแจมอดูโล 26 กุญแจจะใช้ได้ก็ต่อเมื่อดีเทอร์มิแนนต์ของมันมีอินเวอร์ส mod 26
C = K · P (mod 26)
ป้อนตัวอักษร (A–Z) ให้ได้ 4 ตัวพอดีเพื่อเติมเมทริกซ์กุญแจ
วิธีใช้ รหัสฮิลล์
- 1
เลือกเข้ารหัสหรือถอดรหัส และขนาดเมทริกซ์
เลือกเข้ารหัสเพื่อเข้ารหัสหรือถอดรหัสเพื่อถอดรหัส แล้วเลือกกุญแจ 2×2 (ตัวอักษรเป็นคู่) หรือกุญแจ 3×3 (ตัวอักษรเป็นสามตัว)
- 2
ป้อนกุญแจเป็นตัวอักษร
พิมพ์ตัวอักษรกุญแจที่เติมลงในเมทริกซ์ทีละแถว — สี่ตัวอักษรสำหรับกุญแจ 2×2 เก้าตัวสำหรับกุญแจ 3×3 เมทริกซ์แบบสดแสดงดีเทอร์มิแนนต์และบอกคุณว่ากุญแจมีอินเวอร์ส mod 26 หรือไม่
- 3
พิมพ์หรือวางข้อความของคุณ
ป้อนข้อความของคุณแล้วมันจะถูกแปลงขณะที่คุณพิมพ์ แผงการคำนวณแสดงแต่ละบล็อกเป็นเวกเตอร์ การคูณเมทริกซ์ และบล็อกผลลัพธ์
- 4
ตรวจสอบเมทริกซ์กุญแจและอินเวอร์ส
เปิดแผงเมทริกซ์กุญแจเพื่อดูกุญแจ ดีเทอร์มิแนนต์ของมัน และ — เมื่อกุญแจใช้ได้ — เมทริกซ์อินเวอร์สมอดูลาร์ที่ใช้ในการถอดรหัส
- 5
คัดลอก ดาวน์โหลด หรือแชร์
คัดลอกผลลัพธ์ ดาวน์โหลดเป็นไฟล์ข้อความ หรือแชร์ลิงก์ที่จะเปิดเครื่องมือขึ้นมาใหม่พร้อมข้อความ กุญแจ ขนาด และทิศทางที่แน่นอนของคุณพร้อมใช้งานทันที
ทำความเข้าใจรหัสฮิลล์
รหัสฮิลล์คืออะไร
รหัสฮิลล์เป็นรหัสแทนที่แบบหลายตัวอักษรคลาสสิกที่คิดค้นโดยนักคณิตศาสตร์ชาวอเมริกัน Lester S. Hill ในปี 1929 แทนที่จะแทนที่ตัวอักษรครั้งละหนึ่งตัว มันเข้ารหัสตัวอักษรทั้งบล็อกพร้อมกันโดยถือบล็อกนั้นเป็นเวกเตอร์ของตัวเลขและคูณด้วยเมทริกซ์กุญแจลับ มอดูโล 26 มันเป็นรหัสที่ใช้งานได้จริงตัวแรกที่สามารถทำงานกับสัญลักษณ์มากกว่าสามตัวพร้อมกันได้ และมันนำพีชคณิตเชิงเส้นเข้าสู่วิทยาการเข้ารหัสอย่างเต็มตัว
เพราะตัวอักษรผลลัพธ์แต่ละตัวขึ้นอยู่กับตัวอักษรนำเข้าทุกตัวในบล็อกของมัน รหัสฮิลล์จึงซ่อนความถี่ของตัวอักษรเดี่ยวที่เปิดเผยรหัสที่ง่ายกว่า กุญแจ 2×2 ผสมตัวอักษรเป็นคู่ กุญแจ 3×3 ผสมเป็นสามตัว และเมทริกซ์ที่ใหญ่กว่าผสมบล็อกที่ใหญ่ขึ้นไปอีก การกระจายตัวนั้นเป็นแนวคิดเดียวกับที่อยู่เบื้องหลังรหัสบล็อกสมัยใหม่ ซึ่งทำให้รหัสฮิลล์เป็นตัวอย่างการสอนที่ได้รับความนิยม — แม้ว่าในฐานะรหัสเชิงเส้น มันจะถูกแกะได้ง่ายด้วยข้อความธรรมดาที่รู้เพียงเล็กน้อย
รหัสฮิลล์ทำงานอย่างไร
ก่อนอื่น แปลงตัวอักษรเป็นตัวเลขด้วย A=0, B=1 ไปจนถึง Z=25 กุญแจคือเมทริกซ์ n×n ของตัวเลขเช่นนั้น ที่นี่คุณพิมพ์มันเป็นชุดตัวอักษรที่เติมลงในเมทริกซ์ทีละแถว ดังนั้นกุญแจ 2×2 ต้องใช้สี่ตัวอักษรและกุญแจ 3×3 ต้องใช้เก้าตัวอักษร ข้อความธรรมดาถูกแบ่งเป็นบล็อกของตัวอักษร n ตัว แต่ละบล็อกเขียนเป็นเวกเตอร์คอลัมน์
ในการเข้ารหัสบล็อก P ให้คำนวณ C = K · P (mod 26): คูณเมทริกซ์กุญแจด้วยเวกเตอร์และลดทุกค่าลงมอดูโล 26 แล้วอ่านตัวเลขกลับเป็นตัวอักษร ในการถอดรหัส คุณต้องการอินเวอร์สมอดูลาร์ของเมทริกซ์กุญแจ K⁻¹ และคำนวณ P = K⁻¹ · C (mod 26) อินเวอร์สมีอยู่ก็ต่อเมื่อดีเทอร์มิแนนต์ของเมทริกซ์มีอินเวอร์สมอดูโล 26 — นั่นคือเมื่อมันไม่มีตัวประกอบร่วมกับ 26 — ซึ่งเป็นกฎที่สำคัญที่สุดเพียงข้อเดียวในการเลือกกุญแจ
การเลือกเมทริกซ์กุญแจที่ใช้ได้
ไม่ใช่ทุกเมทริกซ์ที่จะเป็นกุญแจฮิลล์ได้ เพื่อให้การถอดรหัสทำงานได้ ดีเทอร์มิแนนต์ของกุญแจที่หามอดูโล 26 ต้องเป็นจำนวนเฉพาะสัมพัทธ์กับ 26 เนื่องจาก 26 = 2 × 13 ดีเทอร์มิแนนต์ต้องเป็นเลขคี่และไม่ใช่พหุคูณของ 13 ค่าที่อนุญาตคือสิบสองจำนวน 1, 3, 5, 7, 9, 11, 15, 17, 19, 21, 23, 25 หากดีเทอร์มิแนนต์เป็นเลขคู่หรือเท่ากับ 13 จะไม่มีอินเวอร์สมอดูลาร์อยู่และข้อความรหัสจะถอดได้ไม่ซ้ำกัน
เครื่องมือนี้คำนวณดีเทอร์มิแนนต์ให้คุณและแสดงป้ายสีเขียวเมื่อกุญแจมีอินเวอร์สหรือป้ายสีแดงเมื่อไม่มี พร้อมกับเมทริกซ์อินเวอร์สที่มันจะใช้ในการถอดรหัส หากกุญแจถูกปฏิเสธ ให้เปลี่ยนตัวอักษรหนึ่งหรือสองตัวและดูดีเทอร์มิแนนต์อัปเดตจนกระทั่งมันลงเอยที่ค่าที่ใช้ได้ การตอบสนองแบบสดนี้เปลี่ยนงานที่ยุ่งยากในการเลือกกุญแจฮิลล์ด้วยมือให้เป็นแบบฝึกหัดเชิงภาพที่รวดเร็ว
ตัวอย่างประกอบ 2×2
ลองนำกุญแจ DDCF ซึ่งเติมเมทริกซ์ 2×2 ด้วยตัวเลข 3, 3 บนแถวบนและ 2, 5 บนแถวล่าง ดีเทอร์มิแนนต์ของมันคือ 3×5 − 3×2 = 9 และเพราะ 9 เป็นจำนวนเฉพาะสัมพัทธ์กับ 26 กุญแจจึงใช้ได้ ทีนี้เข้ารหัส HELP บล็อกแรก HE คือเวกเตอร์ (7, 4): การคูณให้ (3×7 + 3×4, 2×7 + 5×4) = (33, 34) ซึ่งลดลง mod 26 เป็น (7, 8) = HI
บล็อกที่สอง LP คือ (11, 15) ให้ (3×11 + 3×15, 2×11 + 5×15) = (78, 97) = (0, 19) = AT ดังนั้น HELP เข้ารหัสเป็น HIAT ในการถอดรหัส เครื่องมือจะหาอินเวอร์สของกุญแจเป็น (15, 17 / 20, 9) และคูณบล็อกรหัสแต่ละบล็อกด้วยมัน กู้คืน HELP กลับมา พิมพ์ DDCF เป็นกุญแจด้านบนเพื่อดูทุกขั้นตอนปรากฏในแผงการคำนวณแบบสด
ตัวอย่างประกอบ 3×3
ตัวอย่าง 3×3 คลาสสิกใช้กุญแจ GYBNQKURP ซึ่งเติมเมทริกซ์ด้วย 6, 24, 1 บนแถวแรก 13, 16, 10 บนแถวที่สอง และ 20, 17, 15 บนแถวที่สาม การเข้ารหัสไตรกราฟ ACT — เวกเตอร์ (0, 2, 19) — ให้ (67, 222, 319) ก่อนการลด ซึ่งกลายเป็น (15, 14, 7) มอดูโล 26 หรือ POH
ดีเทอร์มิแนนต์ของเมทริกซ์นี้คือ 25 มอดูโล 26 ซึ่งเป็นจำนวนเฉพาะสัมพัทธ์กับ 26 ดังนั้นมันจึงเป็นกุญแจที่ใช้ได้ และอินเวอร์สมอดูลาร์ของมันคือเมทริกซ์ (8, 5, 10 / 21, 8, 21 / 21, 12, 8) การคูณบล็อกรหัส POH ด้วยอินเวอร์สนั้นคืน ACT กลับมา สลับตัวเลือกขนาดไปที่ 3×3 และป้อน GYBNQKURP เพื่อจำลองตัวอย่างในตำราเรียนนี้และดูเมทริกซ์อินเวอร์สที่เครื่องมือหาได้
การเติม ตัวอักษร และการจัดรูปแบบ
รหัสฮิลล์รู้จักเพียงตัวอักษร A–Z จำนวน 26 ตัว ดังนั้นช่องว่าง ตัวเลข และเครื่องหมายวรรคตอนจึงถูกตัดออกก่อนการเข้ารหัสและจะไม่กลับมาเมื่อคุณถอดรหัส เพราะข้อความถูกประมวลผลในบล็อกขนาดคงที่ ข้อความธรรมดาที่มีความยาวไม่เป็นพหุคูณของขนาดบล็อกจะถูกเติมด้วยตัวอักษร X เพื่อทำให้บล็อกสุดท้ายสมบูรณ์ ดังนั้นข้อความที่ถอดได้อาจลงท้ายด้วยตัวอักษรพิเศษหนึ่งหรือสองตัว
ตัวพิมพ์เล็กใหญ่ไม่ถูกรักษาไว้ — ทุกอย่างถูกถือเป็นตัวพิมพ์ใหญ่ ข้อจำกัดเหล่านี้เป็นธรรมชาติของรหัสคลาสสิกมากกว่าของเครื่องมือนี้ และเป็นส่วนหนึ่งของเหตุผลที่ว่าทำไมรหัสฮิลล์ เช่นเดียวกับรหัสร่วมสมัยของมัน จึงถูกใช้สำหรับข้อความทางยุทธวิธีสั้น ๆ มากกว่าข้อความที่ไหลลื่นอย่างอิสระ การแยกย่อยแบบสดแสดงให้เห็นอย่างชัดเจนว่าข้อความของคุณถูกจัดกลุ่มและเติมลงในบล็อกอย่างไร
ความปลอดภัยและการวิเคราะห์รหัส
ความแข็งแกร่งของรหัสฮิลล์ก็เป็นจุดอ่อนร้ายแรงของมันเช่นกัน: มันเป็นเชิงเส้น บล็อกรหัสแต่ละบล็อกเป็นฟังก์ชันเชิงเส้นแบบคงที่ของบล็อกข้อความธรรมดา ดังนั้นผู้โจมตีที่เรียนรู้คู่บล็อกข้อความธรรมดา–ข้อความรหัสมากพอสามารถตั้งและแก้ระบบสมการเชิงเส้นเพื่อกู้คืนเมทริกซ์กุญแจได้โดยตรง สำหรับกุญแจ n×n นั้น บล็อกที่รู้ราว n บล็อกมักจะเพียงพอ ซึ่งทำให้รหัสนี้ล้มเร็วต่อการโจมตีแบบรู้ข้อความธรรมดา
มันยังไม่ให้การกระจายตัวระหว่างบล็อกและไม่มีความสับสนเกินกว่าการผสมเชิงเส้น ดังนั้นบล็อกข้อความธรรมดาที่เหมือนกันจึงเข้ารหัสเป็นบล็อกรหัสที่เหมือนกันเสมอ ตามมาตรฐานสมัยใหม่ มันไม่ปลอดภัย และคุณไม่ควรใช้มันเพื่อปกป้องข้อมูลจริงเลย — จงเลือกใช้อัลกอริทึมที่ผ่านการตรวจทานเช่น AES แทน อย่างไรก็ตาม ในฐานะภาพประกอบที่ชัดเจนและลงมือทำได้ว่าเมทริกซ์ เลขคณิตมอดูลาร์ และการเข้ารหัสแบบบล็อกประกอบกันอย่างไร รหัสฮิลล์ยังคงเป็นหนึ่งในรหัสคลาสสิกที่ดีที่สุดที่จะเรียนรู้
คำถามที่พบบ่อย
รหัสฮิลล์คืออะไร
รหัสฮิลล์ทำงานอย่างไร
ฉันเลือกกุญแจรหัสฮิลล์ที่ใช้ได้อย่างไร
ขอตัวอย่างประกอบของรหัสฮิลล์ได้ไหม
คุณถอดรหัสฮิลล์อย่างไร
อะไรคือความแตกต่างระหว่างรหัสฮิลล์ 2×2 และ 3×3
ทำไมกุญแจของฉันจึงบอกว่าไม่มีอินเวอร์ส
จะเกิดอะไรขึ้นกับช่องว่าง ตัวเลข และเครื่องหมายวรรคตอน
รหัสฮิลล์ปลอดภัยหรือไม่
ใครคิดค้นรหัสฮิลล์
อินเวอร์สมอดูลาร์ของเมทริกซ์คืออะไร
ข้อความของฉันถูกอัปโหลดไปยังเซิร์ฟเวอร์หรือไม่
เครื่องมือที่เกี่ยวข้อง
ทำงานต่อด้วยเครื่องมือที่มีประโยชน์เหล่านี้