MySQL жүйесінде шифрлау: негізгі кілтті айналдыру

Курсқа жаңа қабылдаудың басталуын күтумен «Дерекқор» біз MySQL шифрлау туралы мақалалар сериясын жариялауды жалғастырамыз.

Осы сериядағы алдыңғы мақалада біз талқыладық негізгі кілтті шифрлау қалай жұмыс істейді. Бүгін бұрын алынған білімге сүйене отырып, негізгі пернелердің айналуын қарастырайық.

Негізгі кілтті айналдыру жаңа басты кілтті жасауды және кесте кеңістігінің кілттерін (кесте кеңістігі тақырыптарында сақталады) осы жаңа кілтпен қайта шифрлауды қамтиды.

Шифрланған кесте кеңістігінің тақырыбы қандай болатынын еске түсірейік:

MySQL жүйесінде шифрлау: негізгі кілтті айналдыру

Алдыңғы мақаладан біз сервер іске қосу кезінде барлық шифрланған кесте кеңістігінің тақырыптарын оқитынын және ең үлкен KEY идентификаторын есте сақтайтынын білеміз. Мысалы, егер бізде KEY бар үш кесте болсаID = 3 және KEY бар бір кестеID = 4, онда максималды кілт идентификаторы 4 болады. Осы KEY ID - MAX KEY ID деп атаймыз.

Негізгі пернені айналдыру қалай жұмыс істейді

1. Пайдаланушы ALTER INNODB MASTER KEY орындайды.

2. Сервер UUID және KEY сервері бар жаңа басты кілтті жасау үшін кілттерді сұрайдыID бір плюс MAX теңНЕГІЗГІID. Осылайша біз INNODB-ге тең негізгі кілт идентификаторын аламызKEY-UUID-(MAXНЕГІЗГІID + 1). Негізгі кілт сәтті жасалғаннан кейін MAX KEY идентификаторы біреуге артады (яғни MAXНЕГІЗГІID=MAXНЕГІЗГІID + 1).

3. Сервер басты кілтпен шифрланған барлық кесте кеңістігін сканерлейді және әрбір кесте кеңістігі үшін:

  • кесте кеңістігі кілтін жаңа басты кілтпен шифрлайды;

  • кілт идентификаторын жаңа MAX мәніне жаңартадыНЕГІЗГІЖеке куәлік

  • егер UUID сервер UUID идентификаторынан өзгеше болса, UUID серверін жаңартыңыз.

Біз білетіндей, кестенің шифрын шешу үшін пайдаланылатын негізгі кілт идентификаторы UUID және кесте кеңістігінің тақырыбынан оқылатын KEY ID идентификаторынан тұрады. Қазір біз істеп жатқан нәрсе - сервер дұрыс басты кілтті алуы үшін кесте кеңістігінің шифрлау тақырыбындағы осы ақпаратты жаңарту.

Егер бізде әртүрлі резервтік көшірмелер сияқты әртүрлі орындардағы кесте кеңістіктері болса, олар әртүрлі негізгі кілттерді пайдалануы мүмкін. Сервер іске қосылған кезде осы басты кілттердің барлығын репозиторийден шығарып алу қажет болады. Бұл сервердің іске қосылуын баяулатуы мүмкін, әсіресе сервер жағындағы кілттер қоймасы пайдаланылса. Негізгі пернені айналдыру арқылы біз кесте кеңістігінің кілттерін барлық кесте кеңістігі үшін бірдей бір басты кілтпен қайта шифрлаймыз. Сервер іске қосу кезінде тек бір басты кілтті қабылдауы керек.

Бұл, әрине, жай ғана жағымды жанама әсер. Негізгі кілтті айналдырудың негізгі мақсаты - серверімізді қауіпсіз ету. Басты кілт қоймадан қандай да бір жолмен ұрланған жағдайда (мысалы, қойма серверінен), ұрланған кілтті жарамсыз етіп, жаңа басты кілтті жасауға және кесте кеңістігінің кілттерін қайта шифрлауға болады. Біз қауіпсіз... дерлік.

Алдыңғы мақалада мен кесте кеңістігінің кілті ұрланғанда, үшінші тарап оны деректердің шифрын ашу үшін пайдалана алатыны туралы айттым. Біздің дискімізге кіру мүмкіндігі болған жағдайда. Егер басты кілт ұрланса және шифрланған деректерге рұқсатыңыз болса, кесте кеңістігі кілтінің шифрын ашу және шифры шешілген деректерді алу үшін ұрланған басты кілтті пайдалануға болады. Көріп отырғаныңыздай, басты кілттің айналуы бұл жағдайда көмектеспейді. Біз кесте кеңістігінің кілтін жаңа басты кілтпен қайта шифрлаймыз, бірақ деректерді шифрлау/шифрын шешу үшін пайдаланылатын нақты кілт өзгеріссіз қалады. Сондықтан, «хакер» деректерді шифрды ашу үшін оны пайдалануды жалғастыра алады. Бұған дейін мен мұны меңзегенмін MySQL үшін Percona сервері жай кесте кеңістігінің кілтін қайта шифрлауды ғана емес, шын кесте кеңістігінің қайта шифрлауын орындай алады. Бұл мүмкіндік шифрлау ағындары деп аталады. Дегенмен, бұл функция әлі де эксперименталды.

Негізгі кілтті айналдыру басты кілт ұрланғанда пайдалы, бірақ шабуылдаушы оны пайдалану және кесте кеңістігі кілттерін шифрын ашу мүмкіндігі жоқ.

Тегін демо сабаққа жазылыңыз.

Ары қарай оқу:

Ақпарат көзі: www.habr.com