Tema
/
Interneto svetainių serverio dalies kūrimas GO
📖 Teorija

Sukelk klastojimą pats — TAMPER DETECTED

Įspėjimas sakė, kad šis parašas yra atsparus klastojimo įrodymui. Nepriimk to tikėjimu — sukelk jį. Visas šis žingsnis praktinis; jokio naujo kodo.

1. Pažymėk sveiką būseną. Įkelk dokumentą (ar atverk jau turimą) ir peržiūrėk. Juosta žalia: Integrity verified — the stored file still matches the SHA-256 recorded at upload. Tai checkIntegrity iš naujo maišuoja baitus diske ir randa, kad jie atitinka file_hash.

2. Suklastok saugomą failą. Rask failą diske ir pakeisk vieną baitą. Jo vardas yra storage_key:

$ psql "$DATABASE_URL" -c "select filename, storage_key from documents;"
$ printf 'x' >> uploads/7f3a9c1e0b2d4f6a8c5e1b3d7f9a2c4e   # pridėk vieną baitą

3. Perkrauk puslapį. Juosta dabar raudona:

⚠ TAMPER DETECTED. The stored file no longer matches the SHA-256 recorded at upload.
  recorded at upload:  4a7d1ed414474e4033ac29ccb8653d9b...
  file right now:      9c1f77a2b4e6...

Niekas eilutėje nepasikeitė — file_hash yra tas pats skaičius, koks visada buvo. Kas pasikeitė — perskaičiuota baitų maiša. Programa iš naujo išvedžia tiesą kiekvienoje peržiūroje; ji niekada nepasitiki saugoma kopija. Būtent todėl klastojimas apskritai matomas.

4. Atkurk ir stebėk, kaip išsivalo. Atšauk pakeitimą (pašalink baitą arba įkelk iš naujo) ir perkrauk — juosta vėl žalia. Patikra gyva, ne saugoma vėliava.

5. Pasirašyk suklastotą — tyčia. Suklastok vėl, atverk pasirašymo nuorodą ir pasirašyk. Ji leidžia — o pasirašyta būsena užrašo pakeistą maišą, tą, kurią pasirašytojas iš tikrųjų matė, su vis dar rodoma raudona juosta. Tai sąžininga pozicija: programa užrašo įrodymą, kas buvo pasirašyta; ji neužkerta kelio pasirašyti pakeistą failą ir niekada neapsimeta, kad parašas yra daugiau nei atspaudas. Pasirašytojas, pasirašęs pro raudoną juostą, padarė tai sąmoningai, o įrašas sako tiksliai, kuriuos baitus jis pasirašė.

Tai skirtumas tarp klastojimo įrodymo ir klastojimo prevencijos, ir tarp šito bei kvalifikuoto parašo — pajaustas, ne tik perskaitytas.