Ĉifrado en MySQL: Majstra Ŝlosilo-Rotacio

Antaŭĝoje de la komenco de nova aliĝo por la kurso "Datumbazo" ni daŭre publikigas serion de artikoloj pri ĉifrado en MySQL.

En la antaŭa artikolo en ĉi tiu serio, ni diskutis kiel funkcias ĉifrado de ĉefŝlosilo. Hodiaŭ, surbaze de la scio akirita pli frue, ni rigardu la rotacion de la ĉefaj klavoj.

Mastra ŝlosilo-rotacio implikas generi novan ĉefŝlosilon kaj re-ĉifri la tabelspacŝlosilojn (kiuj estas stokitaj en la tabelspacaj kaplinioj) per ĉi tiu nova ŝlosilo.

Ni rememoru kiel aspektas la kaplinio de ĉifrita tabelspaco:

Ĉifrado en MySQL: Majstra Ŝlosilo-Rotacio

De la antaŭa artikolo, ni scias, ke la servilo legas la kapojn de ĉiuj ĉifritaj tabelspacoj ĉe ekfunkciigo kaj memoras la plej grandan KEY-ID. Ekzemple se ni havas tri tabelojn kun KEYID = 3 kaj unu tablo kun KEYID = 4, tiam la maksimuma ŝlosila ID estos 4. Ni nomu ĉi tiun KEY ID - MAX KEY ID.

Kiel funkcias la rotacio de majstra klavo

1. La uzanto ekzekutas ALTER INNODB MASTER KEY.

2. La servilo petas la ŝlosilringon por generi novan ĉefŝlosilon kun la servilo UUID kaj KEYID egala al unu plus MAXKEYID. Do ni ricevas ĉefŝlosilid egalan al INNODBKEY-UUID-(MAXKEYID + 1). Post sukcesa generacio de la ĉefŝlosilo, MAX KEY ID estas pliigita je unu (t.e. MAXKEYID=MAXKEYID + 1).

3. La servilo skanas ĉiujn tabelspacojn ĉifritajn per la majstra ŝlosilo, kaj por ĉiu tabelspaco:

  • ĉifras la tabelspacan ŝlosilon per la nova ĉefŝlosilo;

  • ĝisdatigas la ŝlosilan identigilon al la nova MAXKEYID;

  • se la UUID estas malsama de la servilo UUID, tiam ĝisdatigu la servilon UUID.

Kiel ni scias, la Majstra Ŝlosilo ID uzata por deĉifri tabelon konsistas el UUID kaj KEY ID legita de la tabelspaca kaplinio. Kion ni faras nun estas ĝisdatigi ĉi tiun informon en la kaplinio pri ĉifrado de tabelspaco por ke la servilo ricevu la ĝustan ĉefŝlosilon.

Se ni havas tabelspacojn de malsamaj lokoj, kiel malsamaj sekurkopioj, tiam ili povas uzi malsamajn ĉefajn ŝlosilojn. Ĉiuj ĉi tiuj majstraj ŝlosiloj devos esti prenitaj el la deponejo kiam la servilo estos komencita. Ĉi tio povas malrapidigi la servilan ekfunkciigon, precipe se servilflanka ŝlosilbutiko estas uzata. Kun rotacio de majstra ŝlosilo, ni reĉifras tabelspacojn per ununura ĉefŝlosilo, kiu estas la sama por ĉiuj tabelspacoj. La servilo nun devus ricevi nur unu ĉefŝlosilon ĉe ekfunkciigo.

Ĉi tio, kompreneble, estas nur agrabla kromefiko. La ĉefa celo de rotacio de majstra ŝlosilo estas fari nian servilon pli sekura. En la okazo, ke la ĉefŝlosilo estis iel ŝtelita de la trezorejo (ekzemple, de la Volbo-Servilo), eblas generi novan ĉefŝlosilon kaj re-ĉifri la tabelspacajn ŝlosilojn, malvalidigante la ŝtelitan ŝlosilon. Ni estas sekuraj... preskaŭ.

En antaŭa artikolo, mi parolis pri kiel post kiam tablospaca ŝlosilo estas ŝtelita, tria povas uzi ĝin por deĉifri la datumojn. Kondiĉe ke ekzistas aliro al nia disko. Se la ĉefŝlosilo estas ŝtelita kaj vi havas aliron al la ĉifritaj datumoj, vi povas uzi la ŝtelitan ĉefŝlosilon por deĉifri la tabelspacan ŝlosilon kaj akiri la deĉifritajn datumojn. Kiel vi povas vidi, la rotacio de la majstra ŝlosilo ne helpas en ĉi tiu kazo. Ni reĉifras la tabulspacan ŝlosilon per la nova ĉefŝlosilo, sed la reala ŝlosilo uzata por ĉifri/malĉifri la datumojn restas la sama. Tial, la "pirato" povas daŭre uzi ĝin por deĉifri la datumojn. Antaŭe mi aludis tion Percona Servilo por MySQL povas fari veran tabelspacan re-ĉifradon, ne nur simplan tabelspacan ŝlosilre-ĉifradon. Ĉi tiu funkcio nomiĝas ĉifrafadenoj. Tamen, ĉi tiu funkcio ankoraŭ estas eksperimenta nuntempe.

Majstra ŝlosilo rotacio estas utila kiam la ĉefŝlosilo estas ŝtelita, sed estas neniu maniero por atakanto uzi ĝin kaj deĉifri la tabelspacŝlosilojn.

Registriĝi por senpaga demo-leciono.

Legu pli:

fonto: www.habr.com