{"id":98088,"date":"2020-10-24T02:42:34","date_gmt":"2020-10-24T00:42:34","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/shifrovanie-v-mysql-rotacziya-master-key"},"modified":"2020-11-18T00:58:48","modified_gmt":"2020-11-17T22:58:48","slug":"shifrovanie-v-mysql-rotacziya-master-key","status":"publish","type":"post","link":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/shifrovanie-v-mysql-rotacziya-master-key","title":{"rendered":"Szyfrowanie w MySQL: rotacja klucza g\u0142\u00f3wnego","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<\/p>\n<p><strong><em>W przededniu nowego naboru na kurs&nbsp;<\/em><\/strong><noindex><a rel=\"nofollow\" href=\"https:\/\/otus.pw\/dADq\/\"><strong><em>\u201eBazy danych\u201d<\/em><\/strong><\/a><\/noindex><strong><em>&nbsp;kontynuujemy publikacj\u0119 serii artyku\u0142\u00f3w na temat szyfrowania w MySQL.<\/em><\/strong><\/p>\n<p>W poprzednim artykule tej serii om\u00f3wili\u015bmy, <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/otus\/blog\/524050\/\"><u>jak dzia\u0142a szyfrowanie z g\u0142\u00f3wnym kluczem (Master Key)<\/u><\/a><\/noindex>. Dzi\u015b, opieraj\u0105c si\u0119 na wcze\u015bniej zdobytej wiedzy, przyjrzymy si\u0119 rotacji g\u0142\u00f3wnych kluczy.<\/p>\n<p>Rotacja g\u0142\u00f3wnych kluczy polega na tym, \u017ce generowany jest nowy g\u0142\u00f3wny klucz, a tym nowym kluczem ponownie szyfrowane s\u0105 klucze przestrzeni tabel (kt\u00f3re s\u0105 przechowywane w nag\u0142\u00f3wkach przestrzeni tabel).<\/p>\n<p>Przypomnijmy sobie, jak wygl\u0105da nag\u0142\u00f3wek zaszyfrowanej przestrzeni tabel:<\/p>\n<p><img decoding=\"async\" alt=\"Szyfrowanie w MySQL: rotacja klucza g\u0142\u00f3wnego\" src=\"\/wp-content\/uploads\/2020\/10\/24057c50b96236c5ee2647aeca4b575f.png\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<p>Z poprzedniego artyku\u0142u wiemy, \u017ce serwer podczas uruchomienia odczytuje nag\u0142\u00f3wki wszystkich zaszyfrowanych przestrzeni tabel i zapami\u0119tuje najwi\u0119kszy IDENTYFIKATOR KLUCZA. Na przyk\u0142ad, je\u015bli mamy trzy tabele z IDENTYFIKATOREM KLUCZA<em>= 3 oraz jedn\u0105 tabel\u0119 z IDENTYFIKATOREM KLUCZA<\/em>ID = 4, wi\u0119c maksymalny identyfikator klucza b\u0119dzie r\u00f3wny 4. Nazwijmy ten KLUCZ ID \u2014 MAX KEY ID.<\/p>\n<h3>Jak dzia\u0142a rotacja g\u0142\u00f3wnego klucza<\/h3>\n<p>1. U\u017cytkownik wykonuje ALTER INNODB MASTER KEY.<\/p>\n<p>2. Serwer \u017c\u0105da w magazynie kluczy (keyring) wygenerowania nowego g\u0142\u00f3wnego klucza z UUID serwera i IDENTYFIKATOREM KLUCZA<em>, r\u00f3wnym zwi\u0119kszonemu o jeden MAX<\/em>IDENTYFIKATOR KLUCZA.<em>W ten spos\u00f3b uzyskujemy identyfikator g\u0142\u00f3wnego klucza r\u00f3wny INNODB<\/em>KEY-UUID- (MAX<em>IDENTYFIKATOR KLUCZA.<\/em>ID + 1). Po pomy\u015blnym wygenerowaniu g\u0142\u00f3wnego klucza MAX IDENTYFIKATOR KLUCZA zwi\u0119ksza si\u0119 o jeden (tj. MAX<em>IDENTYFIKATOR KLUCZA.<\/em>ID = MAX<em>IDENTYFIKATOR KLUCZA.<\/em>ID + 1).<\/p>\n<p>3. Serwer przegl\u0105da wszystkie przestrzenie tabel, zaszyfrowane przy u\u017cyciu g\u0142\u00f3wnego klucza, a dla ka\u017cdej przestrzeni tabel:<\/p>\n<ul>\n<li>\n<p>szyfruje klucz przestrzeni tabel nowym g\u0142\u00f3wnym kluczem;<\/p>\n<\/li>\n<li>\n<p>aktualizuje identyfikator klucza na nowy MAX<em>IDENTYFIKATOR KLUCZA.<\/em>IDENTYFIKATOR KLUCZA;<\/p>\n<\/li>\n<li>\n<p>je\u015bli UUID r\u00f3\u017cni si\u0119 od UUID serwera, to aktualizuje UUID serwera.<\/p>\n<\/li>\n<\/ul>\n<p>Jak wiemy, identyfikator g\u0142\u00f3wnego klucza (Master Key ID), u\u017cywany do deszyfrowania tabeli, sk\u0142ada si\u0119 z UUID i IDENTYFIKATORA KLUCZA, odczytanych z nag\u0142\u00f3wka przestrzeni tabel. To, co teraz robimy, to aktualizujemy te informacje w nag\u0142\u00f3wku szyfrowania przestrzeni tabel, aby serwer uzyskiwa\u0142 w\u0142a\u015bciwy g\u0142\u00f3wny klucz.<\/p>\n<p>Je\u015bli mamy przestrzenie tabelowe uzyskane z r\u00f3\u017cnych miejsc, na przyk\u0142ad z r\u00f3\u017cnych kopii zapasowych, mog\u0105 one u\u017cywa\u0107 r\u00f3\u017cnych g\u0142\u00f3wnych kluczy. Wszystkie te klucze g\u0142\u00f3wne b\u0119d\u0105 musia\u0142y by\u0107 uzyskane z magazynu podczas uruchamiania serwera. Mo\u017ce to spowolni\u0107 uruchamianie serwera, szczeg\u00f3lnie je\u015bli u\u017cywane jest serwerowe przechowywanie kluczy. Dzi\u0119ki rotacji klucza g\u0142\u00f3wnego ponownie szyfrujemy klucze przestrzeni tabelowych jednym kluczem g\u0142\u00f3wnym, identycznym dla wszystkich przestrzeni tabelowych. Teraz, podczas uruchamiania, serwer musi uzyska\u0107 tylko jeden klucz g\u0142\u00f3wny.<\/p>\n<p>Oczywi\u015bcie jest to tylko mi\u0142y efekt uboczny. G\u0142\u00f3wnym celem rotacji kluczy g\u0142\u00f3wnych jest zwi\u0119kszenie bezpiecze\u0144stwa naszego serwera. W przypadku, gdy klucz g\u0142\u00f3wny zosta\u0142 w jaki\u015b spos\u00f3b skradziony z magazynu (na przyk\u0142ad z Vault Server), mo\u017cna wygenerowa\u0107 nowy klucz g\u0142\u00f3wny i ponownie zaszyfrowa\u0107 klucze przestrzeni tabelowych, czyni\u0105c skradziony klucz niewa\u017cnym. Jeste\u015bmy bezpieczni\u2026 prawie.<\/p>\n<p>W poprzednim artykule m\u00f3wi\u0142em o tym, \u017ce po kradzie\u017cy klucza przestrzeni tabeli osoba trzecia mo\u017ce go wykorzysta\u0107 do odszyfrowania danych, pod warunkiem, \u017ce ma dost\u0119p do naszego dysku. W przypadku kradzie\u017cy g\u0142\u00f3wnego klucza i dost\u0119pu do zaszyfrowanych danych, mo\u017cna wykorzysta\u0107 skradziony g\u0142\u00f3wny klucz do odszyfrowania klucza przestrzeni tabeli i uzyska\u0107 odszyfrowane dane. Jak wida\u0107, rotacja g\u0142\u00f3wnego klucza w tym przypadku nie pomaga. Ponownie szyfrujemy klucz przestrzeni tabeli nowym g\u0142\u00f3wnym kluczem, ale rzeczywisty klucz u\u017cywany do szyfrowania \/ odszyfrowania danych pozostaje bez zmian. Dlatego \u201ahaker\u2018 mo\u017ce nadal go u\u017cywa\u0107 do odszyfrowania danych. Wcze\u015bniej zasugerowa\u0142em, \u017ce <noindex><a rel=\"nofollow\" href=\"https:\/\/www.percona.com\/software\/mysql-database\/percona-server\"><u>Percona Server for MySQL<\/u><\/a><\/noindex> mo\u017ce wykonywa\u0107 prawdziw\u0105 ponown\u0105 rotacj\u0119 szyfrowania przestrzeni tabelowych, a nie tylko prost\u0105 ponown\u0105 rotacj\u0119 klucza przestrzeni tabelowej. Ta funkcjonalno\u015b\u0107 nazywa si\u0119 w\u0105tkami szyfrowania (encryption threads). Jednak w tej chwili ta funkcjonalno\u015b\u0107 jest nadal eksperymentalna.<\/p>\n<p>Rotacja klucza g\u0142\u00f3wnego jest przydatna, gdy klucz g\u0142\u00f3wny zosta\u0142 skradziony, ale napastnik nie ma mo\u017cliwo\u015bci jego u\u017cycia i odszyfrowania kluczy przestrzeni tabelowych.<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/otus.pw\/dADq\/\"><strong>Zapisz si\u0119 na bezp\u0142atn\u0105 lekcj\u0119 demonstracyjn\u0105.<\/strong><\/a><\/noindex><\/p>\n<h4>Czytaj dalej:<\/h4>\n<ul>\n<li>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/otus\/blog\/522092\/\">Szyfrowanie w MySQL: skarbnica kluczy<\/a><\/noindex><\/p>\n<\/li>\n<li>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/otus\/blog\/524050\/\">Szyfrowanie w MySQL: wykorzystanie Klucza G\u0142\u00f3wnego<\/a><\/noindex><\/p>\n<\/li>\n<\/ul>\n<p>\u0179r\u00f3d\u0142o: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/otus\/blog\/524624\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u0412 \u043f\u0440\u0435\u0434\u0434\u0432\u0435\u0440\u0438\u0438 \u0441\u0442\u0430\u0440\u0442\u0430 \u043d\u043e\u0432\u043e\u0433\u043e \u043d\u0430\u0431\u043e\u0440\u0430 \u043d\u0430 \u043a\u0443\u0440\u0441&nbsp;\u00ab\u0411\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445\u00bb&nbsp;\u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u043c \u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u0442\u044c \u0441\u0435\u0440\u0438\u044e \u0441\u0442\u0430\u0442\u0435\u0439 \u043f\u0440\u043e \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0432 MySQL. \u0412 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u044d\u0442\u043e\u0439 \u0441\u0435\u0440\u0438\u0438 \u043c\u044b \u043e\u0431\u0441\u0443\u0434\u0438\u043b\u0438, \u043a\u0430\u043a \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0448\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0441 \u0433\u043b\u0430\u0432\u043d\u044b\u043c \u043a\u043b\u044e\u0447\u043e\u043c (Master Key). \u0421\u0435\u0433\u043e\u0434\u043d\u044f, \u043e\u0441\u043d\u043e\u0432\u044b\u0432\u0430\u044f\u0441\u044c \u043d\u0430 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0445 \u0440\u0430\u043d\u0435\u0435 \u0437\u043d\u0430\u043d\u0438\u044f\u0445, \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043d\u0430 \u0440\u043e\u0442\u0430\u0446\u0438\u044e \u0433\u043b\u0430\u0432\u043d\u044b\u0445 \u043a\u043b\u044e\u0447\u0435\u0439. \u0420\u043e\u0442\u0430\u0446\u0438\u044f \u0433\u043b\u0430\u0432\u043d\u044b\u0445 \u043a\u043b\u044e\u0447\u0435\u0439 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043d\u043e\u0432\u044b\u0439 \u0433\u043b\u0430\u0432\u043d\u044b\u0439 \u043a\u043b\u044e\u0447 \u0438 \u044d\u0442\u0438\u043c \u043d\u043e\u0432\u044b\u043c [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":98089,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-98088","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u0412 \u043f\u0440\u0435\u0434\u0434\u0432\u0435\u0440\u0438\u0438 \u0441\u0442\u0430\u0440\u0442\u0430 \u043d\u043e\u0432\u043e\u0433\u043e \u043d\u0430\u0431\u043e\u0440\u0430 \u043d\u0430 \u043a\u0443\u0440\u0441 \u00ab\u0411\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445\u00bb \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u043c.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/shifrovanie-v-mysql-rotacziya-master-key\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"pl_PL\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u0428\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0432 MySQL: \u0440\u043e\u0442\u0430\u0446\u0438\u044f Master Key | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u0412 \u043f\u0440\u0435\u0434\u0434\u0432\u0435\u0440\u0438\u0438 \u0441\u0442\u0430\u0440\u0442\u0430 \u043d\u043e\u0432\u043e\u0433\u043e \u043d\u0430\u0431\u043e\u0440\u0430 \u043d\u0430 \u043a\u0443\u0440\u0441 \u00ab\u0411\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445\u00bb \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u043c.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/shifrovanie-v-mysql-rotacziya-master-key\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-10-24T00:42:34+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-11-17T22:58:48+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Szyfrowanie w MySQL: rotacja klucza g\u0142\u00f3wnego | ProHoster","description":"W przededniu rozpocz\u0119cia nowej edycji kursu \u201eBazy danych\u201d kontynuujemy.","canonical_url":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/shifrovanie-v-mysql-rotacziya-master-key","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"pl_PL","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u0428\u0438\u0444\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0432 MySQL: \u0440\u043e\u0442\u0430\u0446\u0438\u044f Master Key | ProHoster","og:description":"\u0412 \u043f\u0440\u0435\u0434\u0434\u0432\u0435\u0440\u0438\u0438 \u0441\u0442\u0430\u0440\u0442\u0430 \u043d\u043e\u0432\u043e\u0433\u043e \u043d\u0430\u0431\u043e\u0440\u0430 \u043d\u0430 \u043a\u0443\u0440\u0441 \u00ab\u0411\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445\u00bb \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0430\u0435\u043c.","og:url":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/shifrovanie-v-mysql-rotacziya-master-key","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-10-24T00:42:34+00:00","article:modified_time":"2020-11-17T22:58:48+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"98088","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 10:05:50","updated":"2022-10-03 07:13:53","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts\/98088","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/comments?post=98088"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts\/98088\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media\/98089"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media?parent=98088"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/categories?post=98088"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/tags?post=98088"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}