MySQLలో ఎన్క్రిప్షన్: మాస్టర్ కీని ఉపయోగించడం

కోర్సు కోసం కొత్త నమోదు ప్రారంభానికి ఎదురుచూస్తూ "డేటాబేస్" మేము MySQLలో ఎన్‌క్రిప్షన్ గురించి వరుస కథనాలను ప్రచురించడం కొనసాగిస్తాము.

MySQLలో ఎన్క్రిప్షన్: మాస్టర్ కీని ఉపయోగించడం

ఈ సిరీస్‌లోని మునుపటి కథనంలో (MySQLలో ఎన్‌క్రిప్షన్: కీస్టోర్) మేము కీ వాల్ట్‌ల గురించి మాట్లాడాము. ఈ కథనంలో, మాస్టర్ కీ ఎలా ఉపయోగించబడుతుందో చూద్దాం మరియు ఎన్వలప్ ఎన్క్రిప్షన్ యొక్క ప్రయోజనాలు మరియు అప్రయోజనాలు గురించి చర్చిస్తాము. 

ఎన్వలప్ ఎన్‌క్రిప్షన్ వెనుక ఉన్న ఆలోచన ఏమిటంటే, ఎన్‌క్రిప్షన్ కోసం ఉపయోగించే కీలు (టేబుల్‌స్పేస్ కీలు) మరొక కీ (మాస్టర్ కీ)తో గుప్తీకరించబడతాయి. టేబుల్‌స్పేస్ కీలు వాస్తవానికి డేటాను గుప్తీకరించడానికి ఉపయోగించబడతాయి. గ్రాఫికల్‌గా దీనిని ఇలా సూచించవచ్చు:

MySQLలో ఎన్క్రిప్షన్: మాస్టర్ కీని ఉపయోగించడం

మాస్టర్ కీ కీరింగ్‌లో ఉంది మరియు టేబుల్‌స్పేస్ కీలు ఎన్‌క్రిప్టెడ్ టేబుల్‌స్పేస్ హెడర్‌లలో ఉంటాయి (టేబుల్‌స్పేస్ పేజీ 0లో). 

పై చిత్రంలో:

  • పట్టిక A కీ 1 (కీ 1)తో గుప్తీకరించబడింది. కీ 1 మాస్టర్ కీని ఉపయోగించి గుప్తీకరించబడింది మరియు పట్టిక A యొక్క హెడర్‌లో గుప్తీకరించబడి నిల్వ చేయబడుతుంది.

  • పట్టిక B కీ 2తో గుప్తీకరించబడింది. కీ 2 మాస్టర్ కీ (మాస్కర్ కీ) ఉపయోగించి ఎన్‌క్రిప్ట్ చేయబడింది మరియు టేబుల్ B యొక్క హెడర్‌లో గుప్తీకరించబడి నిల్వ చేయబడుతుంది.

  • అందువలన న.

సర్వర్ టేబుల్ Aని డీక్రిప్ట్ చేయవలసి వచ్చినప్పుడు, అది స్టోరేజ్ నుండి మాస్టర్ కీని తిరిగి పొందుతుంది, టేబుల్ A యొక్క హెడర్ నుండి గుప్తీకరించిన కీ 1ని రీడ్ చేస్తుంది మరియు కీ 1ని డీక్రిప్ట్ చేస్తుంది. డీక్రిప్ట్ చేయబడిన కీ 1 సర్వర్ మెమరీలో కాష్ చేయబడుతుంది మరియు టేబుల్ Aని డీక్రిప్ట్ చేయడానికి ఉపయోగించబడుతుంది. .

InnoDB

InnoDBలో, వాస్తవ ఎన్‌క్రిప్షన్ మరియు డీక్రిప్షన్ I/O లేయర్‌లో జరుగుతుంది. అంటే, పేజీ డిస్క్‌కి ఫ్లష్ చేయడానికి ముందు గుప్తీకరించబడుతుంది మరియు డిస్క్ నుండి చదివిన వెంటనే డీక్రిప్ట్ చేయబడుతుంది.

InnoDBలో, ఎన్‌క్రిప్షన్ టేబుల్‌స్పేస్ స్థాయిలో మాత్రమే పని చేస్తుంది. మరియు డిఫాల్ట్‌గా, అన్ని పట్టికలు ప్రత్యేక టేబుల్‌స్పేస్‌లలో సృష్టించబడతాయి (ఫైల్-పర్-టేబుల్ టేబుల్‌స్పేస్) మరో మాటలో చెప్పాలంటే, ఒక టేబుల్‌స్పేస్ సృష్టించబడింది, అది ఒక టేబుల్‌ని మాత్రమే కలిగి ఉంటుంది. మీరు ప్రధాన టేబుల్‌స్పేస్‌లో కూడా పట్టికలను సృష్టించగలిగినప్పటికీ (సాధారణ టేబుల్స్పేస్) కానీ ఏ సందర్భంలోనైనా, పట్టిక ఎల్లప్పుడూ కొన్ని టేబుల్‌స్పేస్‌లో ఉంటుంది. మరియు టేబుల్‌స్పేస్ స్థాయిలో ఎన్‌క్రిప్షన్ నిర్వహించబడుతుంది కాబట్టి, అది పూర్తిగా ఎన్‌క్రిప్ట్ చేయబడింది లేదా కాదు. అంటే, ప్రధాన పట్టిక స్థలంలో పట్టికలలో కొంత భాగాన్ని మాత్రమే గుప్తీకరించడం అసాధ్యం. 

కొన్ని కారణాల వల్ల మీరు ఫైల్-పర్-టేబుల్ డిసేబుల్ చేసి ఉంటే, అప్పుడు అన్ని టేబుల్‌లు సిస్టమ్ టేబుల్‌స్పేస్ లోపల సృష్టించబడతాయి. IN MySQL కోసం పెర్కోనా సర్వర్ మీరు innodb వేరియబుల్ ఉపయోగించి సిస్టమ్ టేబుల్‌స్పేస్‌ను గుప్తీకరించవచ్చుsysటేబుల్ స్పేస్ఎన్క్రిప్షన్ థ్రెడ్‌లను గుప్తీకరించండి లేదా ఉపయోగించడం, కానీ ఇది ఇప్పటికీ ప్రయోగాత్మక లక్షణం. MySQLకి ఇది లేదు.

మేము కొనసాగడానికి ముందు, మేము మాస్టర్ కీ ID యొక్క నిర్మాణాన్ని చూడాలి. ఇది UUID, KEYని కలిగి ఉంటుందిID మరియు ఉపసర్గ "INNODBKey". ఇది ఇలా కనిపిస్తుంది: INNODBKey-UUID-KEYID

UUID అనేది ఎన్‌క్రిప్టెడ్ టేబుల్‌స్పేస్‌తో సర్వర్ యొక్క uuid. కీID అనేది ఎప్పుడూ పెరుగుతున్న విలువ. మొదటి సారి మాస్టర్ కీ KEYని సృష్టించేటప్పుడుID 1. కీ రొటేషన్ సమయంలో, కొత్త మాస్టర్ కీ సృష్టించబడినప్పుడు, KEYID = 2 మరియు మొదలైనవి. మేము ఈ సిరీస్‌లోని తదుపరి కథనాలలో మాస్టర్ కీ రొటేషన్ గురించి మరింత మాట్లాడుతాము.

మాస్టర్ కీ ఐడెంటిఫైయర్ ఎలా ఉంటుందో ఇప్పుడు మనకు తెలుసు, గుప్తీకరించిన టేబుల్‌స్పేస్ హెడర్‌ని చూద్దాం. టేబుల్‌స్పేస్ ఎన్‌క్రిప్ట్ చేయబడినప్పుడు, హెడర్‌కి ఎన్‌క్రిప్షన్ సమాచారం జోడించబడుతుంది. ఇది ఇలా కనిపిస్తుంది:

MySQLలో ఎన్క్రిప్షన్: మాస్టర్ కీని ఉపయోగించడం

KEY ID కీమేము ఇప్పటికే చర్చించిన మాస్టర్ కీ ID నుండి ID. UUID అనేది సర్వర్ యొక్క uuid, ఇది మాస్టర్ కీ ఐడెంటిఫైయర్‌లో కూడా ఉపయోగించబడుతుంది. టేబుల్‌స్పేస్ కీ - టేబుల్ స్పేస్ కీ, ఇది సర్వర్ ద్వారా యాదృచ్ఛికంగా ఉత్పత్తి చేయబడిన 256 బిట్‌లను కలిగి ఉంటుంది. ఇనిషియలైజేషన్ వెక్టర్ (IV) కూడా 256 యాదృచ్ఛికంగా ఉత్పత్తి చేయబడిన బిట్‌లను కలిగి ఉంటుంది (అయితే ఇది 128 బిట్‌లుగా ఉండాలి). AES ఎన్‌క్రిప్షన్ మరియు డిక్రిప్షన్‌ను ప్రారంభించేందుకు IV ఉపయోగించబడుతుంది (256 బిట్‌లలో, 128 మాత్రమే ఉపయోగించబడతాయి). చివరిలో TABLESPACE KEY మరియు IV కోసం CRC32 చెక్‌సమ్ ఉంది.

ఈ సమయంలో నేను హెడర్‌లో టేబుల్‌స్పేస్ యొక్క ఎన్‌క్రిప్టెడ్ కీ ఉందని చెప్పడం ద్వారా కొద్దిగా సరళీకృతం చేస్తున్నాను. నిజానికి, టేబుల్‌స్పేస్ కీ మరియు ఇనిషియలైజేషన్ వెక్టార్‌లు మాస్టర్ కీని ఉపయోగించి నిల్వ చేయబడతాయి మరియు ఎన్‌క్రిప్ట్ చేయబడతాయి. టేబుల్‌స్పేస్ కీ మరియు ఇనిషియలైజేషన్ వెక్టర్‌ను గుప్తీకరించడానికి ముందు, వాటి కోసం CRC32 లెక్కించబడుతుందని గుర్తుంచుకోండి.

CRC32 ఎందుకు అవసరం?

క్లుప్తంగా, మాస్టర్ కీ యొక్క చెల్లుబాటును నిర్ధారించడానికి. టేబుల్‌స్పేస్ కీ మరియు ఇనిషియలైజేషన్ వెక్టర్‌ను డీక్రిప్ట్ చేసిన తర్వాత, చెక్‌సమ్ లెక్కించబడుతుంది మరియు హెడర్‌లో నిల్వ చేయబడిన CRC32తో పోల్చబడుతుంది. చెక్‌సమ్‌లు సరిపోలితే, మా వద్ద సరైన మాస్టర్ కీ మరియు టేబుల్‌స్పేస్ కీ ఉంటాయి. లేకపోతే, టేబుల్‌స్పేస్ మిస్ అయినట్లు గుర్తు పెట్టబడుతుంది (మేము దానిని ఎలాగైనా డీక్రిప్ట్ చేయలేము).

మీరు అడగవచ్చు: కీ ధృవీకరణ ఏ సమయంలో జరుగుతుంది? సర్వర్ ఎప్పుడు ప్రారంభమవుతుంది అనేది సమాధానం. ఎన్‌క్రిప్టెడ్ టేబుల్‌లు/టేబుల్‌స్పేస్‌లతో కూడిన సర్వర్ స్టార్టప్‌లో UUID, కీని చదువుతుందిహెడర్ నుండి ID మరియు మాస్టర్ కీ IDని ఉత్పత్తి చేస్తుంది. ఇది కీరింగ్ నుండి అవసరమైన మాస్టర్ కీని పొందుతుంది, టేబుల్‌స్పేస్ కీని డీక్రిప్ట్ చేస్తుంది మరియు చెక్‌సమ్‌ను ధృవీకరిస్తుంది. మరోసారి, చెక్‌సమ్ సరిపోలితే, అంతా బాగానే ఉంది, లేకపోతే, టేబుల్‌స్పేస్ మిస్ అయినట్లు గుర్తు పెట్టబడుతుంది.

మీరు ఈ సిరీస్‌లోని మునుపటి కథనాన్ని చదివితే (MySQLలో ఎన్‌క్రిప్షన్: కీస్టోర్), అప్పుడు మీరు సర్వర్ ఆధారిత కీ స్టోర్‌ని ఉపయోగిస్తున్నప్పుడు, స్టార్టప్‌లోని సర్వర్ కీ ఐడెంటిఫైయర్‌ల జాబితాను మాత్రమే స్వీకరిస్తుంది లేదా కీ ఐడి మరియు యూజర్ ఐడిని మాత్రమే స్వీకరిస్తుంది, ఎందుకంటే ఈ జత కీని ప్రత్యేకంగా గుర్తిస్తుంది. సర్వర్ ప్రారంభమైనప్పుడు, అది టేబుల్‌స్పేస్ కీలను డీక్రిప్ట్ చేయగలదని తనిఖీ చేయడానికి అవసరమైన అన్ని కీలను అందుకుంటుందని ఇప్పుడు నేను చెప్తున్నాను. కాబట్టి ప్రారంభ సమయంలో, సర్వర్ నిల్వ విషయంలో, కీ మాత్రమే లోడ్ అవుతుందిid మరియు వినియోగదారుid, మరియు అన్ని కీలు కాదా? ఎందుకంటే మీకు అన్ని కీలు అవసరం లేకపోవచ్చు. ఇది ప్రధానంగా మాస్టర్ కీ రొటేషన్ కారణంగా ఉంది. మాస్టర్ కీని తిప్పినప్పుడు, వాల్ట్‌లో కొత్త మాస్టర్ కీ సృష్టించబడుతుంది, కానీ పాత కీలు తొలగించబడవు. అందువల్ల, సర్వర్‌కి అవసరం లేని సర్వర్ కీస్టోర్‌లో మీరు చాలా కీలను కలిగి ఉండవచ్చు మరియు సర్వర్ ప్రారంభమైనప్పుడు తిరిగి పొందబడదు.

మాస్టర్ కీ ఎన్‌క్రిప్షన్ యొక్క లాభాలు మరియు నష్టాల గురించి కొంచెం మాట్లాడవలసిన సమయం ఇది. అతిపెద్ద ప్రయోజనం ఏమిటంటే, మీకు ఒక ఎన్‌క్రిప్షన్ కీ (మాస్టర్ కీ) మాత్రమే అవసరం, ఇది మీ గుప్తీకరించిన డేటా నుండి విడిగా నిల్వ చేయబడుతుంది. ఇది సర్వర్ స్టార్టప్‌ను వేగవంతం చేస్తుంది మరియు నిల్వను చిన్నదిగా చేస్తుంది, ఇది నిర్వహించడం సులభం చేస్తుంది. మరియు సింగిల్ మాస్టర్ కీ పునరుత్పత్తి చేయడం సులభం.

అయితే, మాస్టర్ కీ ఎన్‌క్రిప్షన్‌లో ఒక పెద్ద లోపం ఉంది: టేబుల్‌స్పేస్‌ని టేబుల్‌స్పేస్_కీతో ఎన్‌క్రిప్ట్ చేసిన తర్వాత, అది ఎల్లప్పుడూ అదే కీతో ఎన్‌క్రిప్ట్ చేయబడి ఉంటుంది. మాస్టర్ కీని తిప్పడం ఇక్కడ సహాయం చేయదు. ఇది ఎందుకు ప్రతికూలత? MySQLలో ఆకస్మిక క్రాష్ మరియు కోర్ ఫైల్ సృష్టికి దారితీసే బగ్‌లు ఉన్నాయని మాకు తెలుసు. కోర్ ఫైల్ సర్వర్ మెమరీ డంప్‌ని కలిగి ఉన్నందున, డంప్ డీక్రిప్టెడ్ టేబుల్‌స్పేస్ కీని కలిగి ఉండవచ్చు. విషయాలను మరింత దిగజార్చడానికి, డీక్రిప్ట్ చేయబడిన టేబుల్‌స్పేస్ కీలు మెమరీలో నిల్వ చేయబడతాయి, వీటిని డిస్క్‌కి మార్చుకోవచ్చు. ఈ ఫైల్‌లను మరియు స్వాప్ విభజనను యాక్సెస్ చేయడానికి మీకు రూట్ హక్కులు అవసరం కాబట్టి ఇది ప్రతికూలత కాదని మీరు చెప్పవచ్చు. అవును. కానీ రూట్ కాసేపు మాత్రమే అవసరం. ఎవరైనా డీక్రిప్టెడ్ టేబుల్‌స్పేస్ కీకి యాక్సెస్‌ను పొందిన తర్వాత, అతను/ఆమె రూట్ అధికారాలు లేకుండా కూడా డేటాను డీక్రిప్ట్ చేయడానికి దాన్ని ఉపయోగించడం కొనసాగించవచ్చు. అదనంగా, డిస్క్ దొంగిలించబడవచ్చు మరియు స్వాప్ విభజన/కోర్ ఫైల్‌లను మూడవ పక్ష సాధనాలను ఉపయోగించి చదవవచ్చు. డిస్క్ దొంగిలించబడినా దాన్ని చదవకుండా చేయడమే TDE లక్ష్యం. IN MySQL కోసం పెర్కోనా సర్వర్ కొత్తగా రూపొందించబడిన కీలతో టేబుల్ స్పేస్‌ని మళ్లీ గుప్తీకరించడం సాధ్యమవుతుంది. ఈ లక్షణాన్ని ఎన్‌క్రిప్షన్ థ్రెడ్‌లు అంటారు మరియు వ్రాసే సమయంలో ఇప్పటికీ ప్రయోగాత్మకంగా ఉంది.

కోర్సు గురించి మరింత తెలుసుకోండి

ఇంకా చదవండి:

మూలం: www.habr.com

ఒక వ్యాఖ్యను జోడించండి