Encryption in MySQL: Keystore

In antecessum initium novae dilectionis ad cursum "Database" paravit translationem articulum utilem tibi.

Encryption in MySQL: Keystore

Perspicuus Data Encryption (TDE) apparuit in Percona Servo pro MySQL and MySQL for iam pridem. Sed cogitasti quomodo sub cucullo operatur et quem impulsum TDE habere potest in servo tuo? In serie huius articuli, vide quomodo TDE interius operatur. Incipiamus cum clavibus repono, sicut pro quavis encryption opus est. Tunc propius inspiciemus quomodo encryption operatur in Percona Servo pro MySQL/MySQL et quae additamenta in Percona Servo pro MySQL praesto sunt.

MySQL Keyring

Keyrings pluginae sunt quae servo interrogationi permittunt, claves crea et delere in file locali (keyring_file) vel servo remoto (exempli gratia, in HashiCorp Vault). Claves localiter semper condiuntur ad retrieval accelerandum.

Plugins in duo genera dividi possunt;

  • Locus repono. Exempli gratia, fasciculus localis (hoc appellamus documentum keyring fundatum).
  • remotam repono. Eg Vault Servo (id vocamus keyring servo-substructio).

Haec separatio magni momenti est quod rationes repositionis diversae paulo aliter se habeant non solum cum claves recondere et recuperare, sed etiam cum incipiunt.

Cum tabulae repositionis utens, omnia contenta repositionis onerata sunt in cella sub satus: clavis id, clavis usor, clavis genus, et ipsa clavis.

In casu copiae posterioris (exempli gratia, Fornix server), solum clavis id et usor clavis in satus onustus sunt, ideo omnes claves initium non retardet. Claves ignaviter onerata sunt. Hoc est, ipsa clavis tantum de Cochleis oneratur, cum opus est. Post demptionem, clavis in memoria conditum est ut in futuro nihil opus sit ad eam accedere per TLS nexus ad Vault Servo. Deinde vide quid in promptu sit indicium.

Clavis notitia continet quae sequuntur:

  • key id - clavis identifier, exempli gratia:
    INNODBKey-764d382a-7324-11e9-ad8f-9cb6d0d5dc99-1
  • key genus - key genus fundatur in encryption algorithmus usus, valores possibiles: "AES", "RSA" vel "DSA".
  • longitudo key - Clavis longitudinis in bytes, AES: 16, 24 vel 32, RSA 128, 256, 512 et DSA 128, 256 vel 384.
  • Disputatio dominus clavis est. Si clavis ratio clavis est, ut Magister Key, tunc ager hic vacuus est. Si clavis creatur utens keyring_udf, tunc hic campus dominum clavem indicat.
  • clavem ipsum

Clavis unice notatur a par: key_id, usuario.

Sunt etiam differentiae repositionis et deletionis clavis.

Tabularium celerius est. Clavisrium putares unum tempus tantum scribere de clavis ad limam, sed non est - hic magis hic agitur. Quotiens fasciculus repono modificatur, omnia contenta primo subnixa sunt. Dicamus tabella dicta my_biggest_secreta, tunc tergum my_biggest_secrets.backup erit. Deinde, cella mutatur (claves additae vel sublatae sunt) et, si omnia prospere eveniunt, latibulum in tabulam conditur. Raro in casibus, ut servo ruina, hoc tergum lima videre potes. Scapus tergum tergum deletum proximo tempore claves sunt onerata (plerumque post sileo server).

Cum clavem servandi vel delendi in repositorio servo, horrea coniungere debet cum servo MySQL cum "clavem mittere" / "petitionem clavem deletionis" mandat.

Lets 'adepto ad celeritatem servo startup. Praeterquam quod crypta ipsa celeritatem startup afficit, quaestio est etiam quot claves e crypta opus habeant in satus. Scilicet, hoc maxime refert pro servo stormationis. In startup, server sistit quae clavis ad tabulas encryptas/tabulas necessaria est et clavem e repositorio petit. De "mundo" servo cum magistro Key - unus Magister Key esse debet pro encryptione, quae ab repositione recuperanda est. Plures tamen claves requiri possunt, exempli gratia, cum tergum a servo primario restituitur stoli servo. In talibus casibus Magister Key rotationis apponatur. Haec in futuris articulis fusius tractabuntur, quamvis hic notare velim quod ministrator multiplex Magister Keys utens paulo diutius incipere potest, praesertim cum usus est clavicularium penu.

Nunc paulo plura de keyring_file fama. Cum de keyring_file cogitabam, etiam sollicitus eram quomodo reprimere mutationes keyring_file dum server currit. In 5.7, perscriptio fiebat secundum statistica tabella, quae non erat idealis, et in 8.0 cum SHA256 checksum reposita est.

Primum tempus keyring_file currit, statistica tabella et checksum computantur et recordantur a servo, et mutationes tantum applicantur si inaequant. Cum tabella mutatur, checksum renovatur.

Iam multas quaestiones de keystoribus teximus. Est tamen alius locus maximus, qui saepe oblitus vel male intellectus est - claves communicantes per servos.

Quid dixi? Quisque server (exempli gratia Percona Servo) in botro separatum locum habere debet in Vault Servo in quo Servo Percona claves suas debet reponere. Quisque Magister Key in crypta condita continet Percona Servo GUID intra ID suum. Quid interest? Finge te unum solum habere Vault Servo et omnia Percona Server in botro hoc uno Servo Vault utere. Quaestio videtur manifesta. Si omnes Servientes Percona magistro Key uterentur nullis identicis singularibus, ut id=1, id = 2, etc., tunc omnes servientes in botro eodem Magistro Key uterentur. Hoc est quod providet GUID - distinctionem ministrantium. Cur ergo loqui de clavibus communicandis inter ministrantibus si GUID iam singularis est? Alterum plugin - keyring_udf. Hoc plugin, usor servientis tuae claves suas in Vault servo reponere potest. Difficultas incidit cum usor clavem creat, exempli gratia, servo1, et tunc conatur clavem cum eodem ID creare in servo2, exempli gratia:

--server1:
select keyring_key_store('ROB_1','AES',"123456789012345");
1
--1 Π·Π½Π°Ρ‡ΠΈΡ‚ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎΠ΅ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅
--server2:
select keyring_key_store('ROB_1','AES',"543210987654321");
1

Manere. Ambo servientes eodem Vault Servo utuntur, nonne munus keyring_key_store in calculonis desit? Interestingly, si idem servo idem facere conaris, errorem feres;

--server1:
select keyring_key_store('ROB_1','AES',"123456789012345");
1
select keyring_key_store('ROB_1','AES',"543210987654321");
0

SIC, ROB_1 iam exstat.

Primum exemplum de secundo agamus. Ut antea diximus, keyring_vault vel quodlibet aliud crypta (keyring) cache omnia clavis IDs in memoria. Itaque, novam clavem creando, ROB_1 servo1 additur, et praeter hanc clavem ad Vault mittens, clavis etiam cella additur. Nunc, cum eandem clavem iterum addere conamur, keyring_vault coercet si clavis in cella existit et errorem eiicit.

In primo casu aliter se habet. Servo1 et server2 gazophylacium separatum habent. ROB_1 additis clavibus cellae in server1 et fornice server, clavis cella in server2 e sync est. Latibulum in servo2 ROB_1 clavem non continet. Ita, clavis ROB_1 scripta est ad keyring_key_storie et ad Vault servo, quod actu overscribit (!) valorem priorem. Nunc clavis ROB_1 in Vault servo est 543210987654321. Interestingly, server Cochlea tales actiones non impedit et facile vetus valorem overscribit.

Nunc videmus quam ob rem segregatio a servo in Vault magni momenti esse possit cum keyring_udf uteris et claves reponunt in Vault. Quomodo talem separationem in crypta ministrantis praebet?

Dupliciter partitio in Buy. Diversas puncta montis efficere pro unoquoque servo potes, vel diversas vias in eodem monte puncto utere. Optime hoc demonstrandum est cum exemplis. Intueamur igitur singula capita prima puncta;

--server1:
vault_url = http://127.0.0.1:8200
secret_mount_point = server1_mount
token = (...)
vault_ca = (...)

--server2:
vault_url = http://127.0.0.1:8200
secret_mount_point = sever2_mount
token = (...)
vault_ca = (...)

Hic videre potes quod server1 et server2 diversis punctis montanis utantur. Semita separationis figuratio sic erit:

--server1:
vault_url = http://127.0.0.1:8200
secret_mount_point = mount_point/server1
token = (...)
vault_ca = (...)
--server2:
vault_url = http://127.0.0.1:8200
secret_mount_point = mount_point/sever2
token = (...)
vault_ca = (...)

Hoc in casu, ambo ministri in eodem monte puncto "mons_puncto" utuntur, sed viis diversis. Cum primum secretum de servo1 utens hac via creas, Creator automatice "server1" directorium creat. Nam servo2 omnia eadem sunt. Cum ultimum secretum in mount_point/server1 vel mount_point/server2 deles, haec directoria etiam servientis Vault delet. Si vias scissuras uteris, solum unum punctum montis creare debes et limas config mutare ut ministri semitis separatis utantur. Mons punctum creari potest cum petitione HTTP. Cum Crispo hoc fieri potest sic:

curl -L -H "X-Vault-Token: TOKEN" –cacert VAULT_CA
--data '{"type":"generic"}' --request POST VAULT_URL/v1/sys/mounts/SECRET_MOUNT_POINT

Omnes agri (SIGNUM, VAULT_CA, VAULT_URL, SECRET_MOUNT_POINT) parametris configurationis documenti respondent. Utique ad idem facere potes utilitates Buy. Facilius autem est automate creationem montis. Spero te hanc informationem iuvare et in proximis articulis in hac serie te videre.

Encryption in MySQL: Keystore

Lege plus:

Source: www.habr.com