GPG: ověření podpisu v proměnných místo souboru

GPG: ověření podpisu v proměnných místo souboru
« kdy: 12. 05. 2018, 15:48:39 »
Ahoj,

potrebuju periodicky stahovat skript a spoustet ho v bashi. Abych mel jistotu, ze ho nikdo neupravil, rad bych overoval gpg podpis.
Verejny GPG klic si na pc, kde se bude stahovat nahraju rucne a navic ho nechci importovat, ale overovat primo ze souboru:

Kód: [Vybrat]
martin@martin:~/test$ cat test.sh
#!/bin/bash
echo "ok"
martin@martin:~/test$ gpg -u 1D9883AE -a --sign --detach-sig --output test.sh.asc test.sh
martin@martin:~/test$
martin@martin:~/test$ gpg --no-default-keyring --keyring ./x.gpg --verify test.sh.asc test.sh 2>/dev/null && bash test.sh || echo "gpg_verify_error"
ok
martin@martin:~/test$

            # PO ZMENE SOUBORU SE NESPUSTI:

martin@martin:~/test$ sed -i 's/ok/OK/g' test.sh
martin@martin:~/test$ cat test.sh
#!/bin/bash
echo "OK"
martin@martin:~/test$ gpg --no-default-keyring --keyring ./x.gpg --verify test.sh.asc test.sh 2>/dev/null && bash test.sh || echo "gpg_verify_error"
gpg_verify_error
martin@martin:~/test$

Tohle krasne funguje.

Jenze ja nechci soubory ukladat na disk (budou se stahovat casto), ale mit je v promennych. Zkousel jsem:
Kód: [Vybrat]
martin@martin:~/test$ python -m SimpleHTTPServer 8080 &
martin@martin:~/test$
martin@martin:~/test$ curl http://localhost:8080/test.sh
#!/bin/bash
echo "ok"
martin@martin:~/test$ curl http://localhost:8080/test.sh.asc
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1

iQIcBAABAgAGBQJa9uxCAAoJEBD8Q3R7umFHW/EQALRXXnrJ+aTyVo2zmvA6ayMc
...
martin@martin:~/test$
martin@martin:~/test$ script=$(curl -s http://localhost:8080/test.sh); sign=$(curl -s http://localhost:8080/test.sh.asc);
martin@martin:~/test$ echo $script
#!/bin/bash echo "ok"
martin@martin:~/test$ echo -e $script
#!/bin/bash echo "ok"
martin@martin:~/test$ script=$(curl -s http://localhost:8080/test.sh); sign=$(curl -s http://localhost:8080/test.sh.asc); gpg --no-default-keyring --keyring ./x.gpg --verify $sign $script 2>/dev/null && echo $script | bash || echo "gpg_verify_error"
gpg_verify_error
martin@martin:~/test$

Cilem tedy je:
Kód: [Vybrat]
# script=$(curl -s http://localhost:8080/test.sh); sign=$(curl -s http://localhost:8080/test.sh.asc); gpg --no-default-keyring --keyring ./x.gpg --verify $sign $script 2>/dev/null && echo $script | bash || echo "gpg_verify_error"
Prvni problem - kdyz si pres echo vypisu promennou, zalomeni radku jsou pryc.
Druhy problem - umi gpg overovat z promennych, jako to mam na ukazce?

Zkousim to vic, nez hodinu, ale stale jsem na nic neprisel :-(


« Poslední změna: 13. 05. 2018, 23:08:30 od Petr Krčmář »
"Kdo v zájmu bezpečí obětuje část své svobody, v konečném důsledku přijde o svobodu i svou bezpečnost."


Jose D

  • *****
  • 881
    • Zobrazit profil
Re:GPG - overeni podpisu promennych misto souboru
« Odpověď #1 kdy: 12. 05. 2018, 16:08:29 »
Citace
kdyz si pres echo vypisu promennou, zalomeni radku jsou pryc.
dej si nazev promenne v echu do uvozovek "


Kód: [Vybrat]
..
martin@martin:~/test$ gpg --no-default-keyring --keyring ./x.gpg --verify $sign $script
..

nejsem ted na linux pc, ale myslim, ze problem je, ze misto filename souboru kterej obsahuje podpis string tam davas rovnou string podpisu a souboru.
Koukni se do manu co je potreba aby soubor a podpis sel ze STDIN, a/nebo si oba soubory vytvor nekde v /dev/shm v ramdisku, jestli ti je líto disk I/O.

Re:GPG - overeni podpisu promennych misto souboru
« Odpověď #2 kdy: 12. 05. 2018, 16:33:32 »
Diky za tip.

Nasel jsem tento prispevek: https://lists.gnupg.org/pipermail/gnupg-devel/2002-November/019343.html

A podle neho zkousim:
Kód: [Vybrat]
martin@martin:~/test$ script=$(curl -s http://localhost:8080/test.sh)
martin@martin:~/test$ sign=$(curl -s http://localhost:8080/test.sh.asc)
martin@martin:~/test$
martin@martin:~/test$ echo "$script"
#!/bin/bash
echo "ok"
martin@martin:~/test$ echo "$sign" | head -n1
-----BEGIN PGP SIGNATURE-----
martin@martin:~/test$

martin@martin:~/test$ gpg --no-default-keyring --keyring ./x.gpg --enable-special-filenames --verify - '-&5' <test.sh.asc 5<test.sh 2>/dev/null && echo "$script" | bash || echo "gpg_verify_error"
ok
martin@martin:~/test$
Pri predani cesty k souboru funguje krasne.

Problem je, ze se mi nedari predat obsah promennych:
Kód: [Vybrat]
martin@martin:~/test$ gpg --no-default-keyring --keyring ./x.gpg --enable-special-filenames --verify - '-&5' <(echo "$sign") 5<(echo "$script") 2>/dev/null && echo "$script" | bash || echo "gpg_verify_error"
Stale blika kurzor a na neco to ceka.
"Kdo v zájmu bezpečí obětuje část své svobody, v konečném důsledku přijde o svobodu i svou bezpečnost."

Re:GPG - overeni podpisu promennych misto souboru
« Odpověď #3 kdy: 13. 05. 2018, 01:17:36 »
Tak jsem problem trochu obesel a timto to prohlasuju za hotove:

Kód: [Vybrat]
gpg --export -u 896F4A1D > public.gpg
gpg -u 896F4A1D -a --clearsign --output test.sh.asc test.sh

cmd=$(curl -s http://localhost:8080/test.sh.asc | gpg --no-default-keyring --keyring ./public.gpg --decrypt 2> /dev/null); [ $? -eq 0 ] && echo "$cmd" | bash || echo "gpg_verify_error"
"Kdo v zájmu bezpečí obětuje část své svobody, v konečném důsledku přijde o svobodu i svou bezpečnost."