Avaimen luonti ei tarvitse väliaikaistiedostoa, ja sen pois jättäminen korjaa vähemmän kuin useimmat oppaat antavat ymmärtää. Se poistaa tiedoston elinkaaren ja siihen liittyvän siivouskilpailun. Se jättää koskematta jokaiseen mahdollisuuteen vuotaa salaisuus myöhemmin. Näiden komentosarjojen oikeellisuusongelma istuu yleensä muualla, koska diagnostiikka ja avainmateriaali kulkevat eri virroissa.

Tiedosto ei koskaan ollut se altistus, jota luulit

Väliaikaistiedosto on konkreettinen riski, kun se on kaikkien luettavissa, kun se selviää kaatumisesta tai kun siivousvaihe ohitetaan poikkeuksen jälkeen. Ne ovat todellisia ja ne kannattaa korjata. Ne ovat myös paikallisia, näkyviä ja helppoja testata. Nimeä jokainen omassa komentosarjassasi ennen kuin päättelet, että muutos oli vain kosmeettinen.

Hiljaisemmat riskit istuvat alavirrassa: virheenjäljityksen aikana tulostettu avain, poikkeus joka sarjallistaa koko tulosobjektin, kaatumiskäsittelijä joka kirjoittaa muistivedoksen, lokien kokoaja joka vastaanottaa tiedostopolun ja sitten sisällön. Väliaikaistiedoston välttäminen ei tee mitään yhdellekään niistä, ja muun uskominen on tapa, jolla hyväntahtoinen uudelleenkirjoitus jättää salaisuuden aiempaa paljastetummaksi. Kohtele muutosta yhtenä parannuksena sarjassa, älä ratkaisuna.

Mitä asiakas kirjoittaa, kun tiedostonimeä ei anneta

Asiakkaan nykyiset versiot lähettävät luodun avaimen vakiopisteeseen, kun avainkomento annetaan ilman tulostepolkua. Juuri tämä dokumentoitu käyttäytyminen tekee muistissa tapahtuvasta lähestymistavasta toimivan, ja se poistaa tarpeen vanhemmalle tempulle osoittaa työkalu laitepolkuun.

import subprocess
proc = subprocess.run(
    ["openvpn", "--genkey", "tls-crypt"],
    stdout=subprocess.PIPE,
    stderr=subprocess.PIPE,
    check=True,
)
key_material = proc.stdout

Välitä komento listana. Tässä ei tarvita komentotulkin laajennusta, ja tulkin käyttöönotto tekisi argumenttien rajan riippuvaiseksi lainausmerkeistä, joita et hallitse. Käytä aiottua suoritettavaa tiedostoa absoluuttisella polulla, jos komentosarja voi ajaa eri hakupolulla kuin odotat.

Paluukoodin tarkistus estää menestyspolkua jatkamasta epäonnistuneen kutsun jälkeen. Ilman sitä tyhjä tavujono voi virrata eteenpäin ja epäonnistua vasta paljon myöhemmin, kohdassa jossa avainta käytetään eikä virheilmoitus enää lainkaan mainitse luontia.

Kaksi virtaa, kaksi merkitystä

Vakiopiste kuljettaa avaimen. Vakiovirhe kuljettaa kaiken, mitä työkalu haluaa sinulle kertoa, mukaan lukien varoitukset kokoonpanosta, versiosta ja avaintyypistä. Molempien uudelleenohjaus yhteen puskuriin on se virhe, joka tuottaa uskottavalta näyttävän avaimen, jonka keskelle on ommeltu lause.

Pidä myös epäonnistumisen polku erillään. Kun kutsu epäonnistuu, raportoi epäonnistunut komento ja poistumistila ja päätä sitten tietoisesti, onko mikään osa vakiovirheestä turvallista näyttää. Koko tulosobjektin kippaaminen lokiin on tavallinen oikotie, ja se voi viedä avaimen mukanaan.

Binääriturvallinen lukeminen on tärkeää, jos myöhemmin tiivistät materiaalin tai vertailet sitä. Tekstitila odottamattomalla koodauksella voi muuttaa tavuja, joita ei koskaan ollut tarkoitettu tekstiksi, ja muuttunutta avainta ei erota väärästä ennen kuin kättely epäonnistuu.

Jos kuitenkin tallennat sen, tee se tietoisesti

Useimmat käyttöönotot tarvitsevat lopulta avaimen levylle, yhdyskäytävälle tai salaisuuksien varastoon. Kirjoita se kerran, rajoittavin oikeuksin luonnista alkaen eikä myöhemmällä chmodilla, ja tee kirjoituksesta atomista, jotta osittainen tiedosto ei koskaan tule siksi, jonka palvelu lukee käynnistyksessä. Uudelleennimeäminen saman hakemiston polusta riittää yleensä siihen. Poista valmistelupolku epäonnistumisen haarassa, koska epäonnistunut kirjoitus on juuri se kopio, jonka ihmiset unohtavat.

Aseta tiedoston tila sen luonnissa ja pidä myös hakemiston tila rajoittavana. Vältä mitä tahansa polkua sijainnin alla, jonka varmuuskopiointityö pyyhkäisee miettimättä, koska salaisuus öisessä varmuuskopiossa on salaisuus jokaisessa sen varmuuskopion kopiossa. Sama päättely pätee jaettuun taltioon, jota muut palvelut voivat lukea.

Jaettu avain ei ole identiteetti

Tämän materiaalin luominen ei myönnä varmentetta, ei rekisteröi asiakasta eikä vahvista, kuka yhdistää. Jaettu avain suojaa kanavaa osapuolten välillä, jotka jo luottavat toisiinsa; identiteetti tulee edelleen varmenteesta ja mistä tahansa todennuksesta, joka seisoo sen edessä.

Myöskään avaintyypit eivät ole vaihdettavissa. Yhden ominaisuuden symmetrinen avain ei ole valmis korvike toiselle, ja uudemmat julkaisut lisäävät omat varianttinsa eri tiedostoilla kummassakin päässä. Luo tyyppi, jonka kokoonpanosi todella nimeää, ja käytä sitä sitten roolissa, jonka se tyyppi määrittelee.

Testaa tulos oikealla yhteydellä sen sijaan että tutkisit tiedoston kokoa. Jos kättely täydentyy eivätkä lokit näytä avainvaroituksia, luontipolku on oikea; jos avain olisi katkennut yhdistetyn virran takia, yhteys epäonnistuisi tavalla, joka osoittaa vastapuoleen eikä komentosarjaan.

Aiheeseen liittyvät artikkelit