การเข้ารหัสใน MySQL: การหมุนคีย์หลัก

โดยคาดว่าจะเริ่มการลงทะเบียนใหม่สำหรับหลักสูตร "ฐานข้อมูล" เราเผยแพร่บทความเกี่ยวกับการเข้ารหัสใน MySQL อย่างต่อเนื่อง

ในบทความก่อนหน้านี้ในชุดนี้ เราได้กล่าวถึง วิธีการทำงานของการเข้ารหัสมาสเตอร์คีย์. วันนี้จากความรู้ที่ได้รับมาก่อนหน้านี้ เรามาดูการหมุนของคีย์หลักกัน

การหมุนเวียนมาสเตอร์คีย์เกี่ยวข้องกับการสร้างมาสเตอร์คีย์ใหม่และเข้ารหัสคีย์พื้นที่ตารางอีกครั้ง (ซึ่งเก็บไว้ในส่วนหัวของพื้นที่ตาราง) ด้วยคีย์ใหม่นี้

ลองนึกถึงส่วนหัวของพื้นที่ตารางที่เข้ารหัสว่ามีลักษณะอย่างไร:

การเข้ารหัสใน MySQL: การหมุนคีย์หลัก

จากบทความที่แล้ว เราทราบว่าเซิร์ฟเวอร์อ่านส่วนหัวของพื้นที่ตารางที่เข้ารหัสทั้งหมดเมื่อเริ่มต้นระบบ และจดจำรหัสคีย์ที่ใหญ่ที่สุด ตัวอย่างเช่น ถ้าเรามีสามตารางที่มี KEYID = 3 และหนึ่งตารางที่มี KEYID = 4 จากนั้น ID ของคีย์สูงสุดจะเป็น 4 เรียก KEY ID นี้ว่า MAX KEY ID

วิธีการทำงานของการหมุนมาสเตอร์คีย์

1. ผู้ใช้ดำเนินการ ALTER INNODB MASTER KEY

2. เซิร์ฟเวอร์ร้องขอให้พวงกุญแจสร้างมาสเตอร์คีย์ใหม่ด้วยเซิร์ฟเวอร์ UUID และ KEYID เท่ากับหนึ่งบวก MAXKEYรหัส ดังนั้นเราจึงได้รหัสมาสเตอร์คีย์เท่ากับ INNODBKEY-UUID-(สูงสุดKEYรหัส + 1). เมื่อสร้างมาสเตอร์คีย์สำเร็จ MAX KEY ID จะเพิ่มขึ้นทีละหนึ่ง (เช่น MAXKEYID=สูงสุดKEYรหัส + 1).

3. เซิร์ฟเวอร์จะสแกนพื้นที่ตารางทั้งหมดที่เข้ารหัสด้วยมาสเตอร์คีย์ และสำหรับแต่ละพื้นที่ตาราง:

  • เข้ารหัสคีย์ tablespace ด้วยมาสเตอร์คีย์ใหม่

  • อัปเดตรหัสคีย์เป็น MAX ใหม่KEYNS;

  • หาก UUID แตกต่างจาก UUID ของเซิร์ฟเวอร์ ให้อัปเดต UUID ของเซิร์ฟเวอร์

ดังที่เราทราบ รหัสมาสเตอร์คีย์ที่ใช้ในการถอดรหัสตารางประกอบด้วย UUID และรหัสคีย์ที่อ่านจากส่วนหัวของพื้นที่ตาราง สิ่งที่เรากำลังทำอยู่ตอนนี้คือการอัปเดตข้อมูลนี้ในส่วนหัวของการเข้ารหัส tablespace เพื่อให้เซิร์ฟเวอร์ได้รับคีย์หลักที่ถูกต้อง

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

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

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

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

ลงทะเบียนเพื่อรับบทเรียนตัวอย่างฟรี

อ่านเพิ่มเติม:

ที่มา: will.com