GPG titkosított anyag on-the-fly olvasása + visszaírása jelszó bekérés nélkül

Fórumok

Üdv,

Régóta tervezem, hogy írok egy script-et vagy keresek valami progit, amivel azt tudnám csinálni, hogy ha bármilyen fájlt titkosítok GPG-vel, akkor az a progi ezt megnyitja és kéri a jelszavam, de a lényeg az lenne, hogy ha mentést nyomok a progiból és kilépek, akkor visszatitkosítódjon anélkül hogy újra berkérné a jelszót (amit már megnyitáshoz beírtam) és hogy fontos nyomokat hagyna.

Egyik ilyen anyagom lenne pl. egy OpenOffice Calc anyag. Habár OpenOffice tud titkosítva elmenteni, utánaolvasva nekem úgy tűnik, hogy az US törvények miatt gyengébb titkosítást használ. De nem csak OO-hoz kellene.

Arra gondoltam, hogy egy script-et indítva bekérem a jelszót cli-ből vagy GUI-ból, mindegy, majd letárolom egy változóba. Ha a progiból kiléptem, akkor meg visszatitkosítom a változó tartalma alapján, a titkosítatlan fájlt meg törlöm. Csak hát ez sok helyen megbukik biztonsági szempontból.. :)

A fájlrendszerem nem titkosított és nem is akarom titkosítani blokk szinten.

Ti milyen megoldást használtok olyan anyagok erősebb titkosítására, amit egy nap pl. 30-szor megnyittok?

Pár darab ilyen anyagom lenne, és jó lenne olyan megoldás, amit könnyen át lehet ültetni másik rendszerre.

Előre is köszi.

Hozzászólások

ha ilyen surun hasznalod az adott doksit akkor miert kizaro ok a titkositott blokkeszkoz? az nemjarhato ut hogy csinalsz egy titkositott loopdev-et es azt csatolod be a filerendszerbe amikor kell?

udv Zoli

akár DVDre is kiírhatod a titkosított könyvtárat. később azt is simán lehet csatolni a jelszó ismeretében. igaz, csak gnu/linuxokon működik, de ma már vannak pendrive linuxdisztribek is. ha nagyon paranoiás vagy, nem használsz zárt forrású programot ilyen célra. létezik egyáltalán linux és windows rendszereken egyaránt használható valódi opensource megoldás fájltitkosításra ?

Egyébként tetszik az általad javasolt megoldás. Most tesztelgetem. Valószínűleg az lesz, hogy nap elején felcsatolom és ok. Az tetszik benne, hogy abszolút beállíthatóak a paraméterek (algo, bit nagyság stb.). Kár hogy a cryptkeeper lerántaná a teljes gnome desktop-ot.

Még a libpam-encfs -t akarom megnézni. Azt írja, hogy login-nal együtt lehet encfs-t mount-olni.

Truecrypt-et meg keresem, de nem találom a debian tárolókban. Mindenképpen olyan megoldást keresek, amely debian tárolóban elérhető.

infó többek között itt.
le kellene fordítani a truecrypt forráskódot azonos fordítón, a binary kiadással azonos opciókkal, majd össze kellene hasonlítani az eredményt, első körben. továbbá szurkolunk, ha nem nézzük át mi magunk a forrást, hogy a community ne úgy ellenőrizze a truecrypt forrást, mint a debianos opensslt.

nyitott kérdések vannak a TCel kapcsolatban, eléggé sok. kik a fejlesztői? esetleg valamelyik országban valóban ilyen neveket adnak, mint syncon meg ennead? és vezetéknevek nélkül? hol van bejegyezve a TrueCrypt Foundation? miért volt eredetileg az Antarktiszra bejegyezve a truecrypt.org? azóta a Network Solutions rejtett domain regisztrációját veszik igénybe. a Truecrypt trademark miért egy magánszemély nevére van bejegyezve, egy prágai panelházba, egy olyan ember nevére aki nem lakik ott? miért alkalmaznak sajátos moderálási elveket a fórumaikon? nem szeretnek bizonyos témákat?
JózsikaBTnél ezek nem jelentenek komoly problémát, de egy bankba sosem kerülhetne be egy ilyen hátterű szoftver.

+1 :D köszi ismét!

már kezdtem furcsálni, hogy ilyen hamar kiutaztál a kedvemért! =)
tiszta Casino utánérzés, biztos a hátsó raktárba szeletelik az algoritmusokat... ;)
az antarktiszos móka után biztos páran elküldték őket melegebb éghajlatra, így esett a választás Vegászra... =)

(google maps)

Köszi mindenkinek az ötleteket.

Végül úgy döntöttem, hogy mégis írok egy scriptet a problémámra, mivel olyan megoldásra van szükségem, ami csak addig bontja ki a fájlomat a titkosított formátumból, amíg szerkesztem (pl. pár percre). Mivel be van kapcsolva a gépem folyamatosan, ezért egy fizikális hozzáférés esetén a blokk illetve userspace filerendszeres titkosítások nem nyújtanak megoldást (legalábbis ezt jobban preferálom).

Ez azért jobb nekem, mert olyan környezetben is biztosítani szeretném magamnak, hogy kényelmesen sokszor megnyithassam a titkosított dokumentumaimat, ahol nem akarok kernel szintű beállításokat végezni. Az encfs-t is fel kellene csatolni minden alkalommal, szóval fél megoldás nekem arra, ahogy szeretném.

Az alábbi módon működik (gpg_writeback.sh nevet adtam neki, de jó lenne valami normális név, amire 1 év múlva is könnyen asszociálok, ötlet?):
--------------------------
script.sh command file

pl:
script.sh gedit jelszavaim.gpg
script.sh vi mylist.gpg

Zenity használatával (és a GUI változó 1-re állításával) grafikusan kéri be a jelszót.


-----------------------------------------------------------
#!/bin/bash

# THIS SCRIPT OPENS A GPG PROTECTED FILE FOR EDITING
# AND THEN ENCRYPTS BACK ITS CONTENT
# WITH THE SAME PASSWORD KEPT IN MEMORY
#
# USAGE: script command filename
# Needed packages: gnupg, zenity
#


GUI=1
TEMP=`mktemp /dev/shm/tmp.XXXXXX`
rm -f $TEMP

HASH=`sha1sum $0`
COMMAND=$1
FILE=$2


# Ensure to remove file even after unexpected terminations
trap "{ rm -f $TEMP; }" 0 1 2 5 15


if [ "$GUI" == "0" ]
then
	echo $HASH
	echo -n "Give me the password to use:"
	read -s PW
	echo
else
	PW=`zenity --entry --hide-text --title="Warning!" --text="Enter password:"`
	#PW=`zenity --entry --hide-text --title="Warning!" --text="$HASH, Enter password:"`
fi


# Decrypt the file
echo $PW | gpg -q --decrypt --passphrase-fd 0 -o $TEMP $FILE &> /dev/null

if [ $? -ne 0 ]
then
	rm -f $TEMP
	echo "Error during decrypting!"
	echo "Exiting."
	echo
	exit 1
else
	# Open file
	$COMMAND $TEMP 2> /dev/null

	# Safety backup and delete (gpg cannot overwrite without confirmation)
	mv $FILE $FILE.bak

	# Encrypt back
	echo $PW | gpg -qc --cipher-algo aes256 --passphrase-fd 0 \
		-o $FILE $TEMP &> /dev/null
fi

rm -f $TEMP
exit

-----------------------------------
Szerk.: közben változtattam 1-2 dolgot amit kihagytam.
Elvileg most már végleges. Néhány hülyeséget kihagytam.

Ezzel van egy kis baj.
Az mktemp 0600 jogokkal hozza létre a $TEMP filet, de azt letörlöd. A gpg-s viszont már a rendes umask-al jön létre, ami akár "world readable" is lehet. (Plusz akár még versenyhelyzetet is okozhat.)
Úgy kéne, hogy a törlést kiveszed az elejéről, és...
# Decrypt the file
echo $PW | gpg -q --decrypt --passphrase-fd 0 $FILE 1>$TEMP 2>/dev/null

Ez tényleg necces. Köszi az észrevételt és nagyon jó megoldás, kijavítottam és működik frankón :)

Végeztem még néhány változtatást, mint pl. a 'gpg' parancs teljes elérési úttal való használata stb. Mivel nem tudom szerkeszteni az előzőt, inkább bedobom mégegyszer:
-----------------------------------------------


#!/bin/bash

# THIS SCRIPT OPENS A GPG PROTECTED FILE FOR EDITING
# AND THEN ENCRYPTS BACK ITS CONTENT
# WITH THE SAME PASSWORD KEPT IN MEMORY
#
# USAGE: script command filename
# Needed packages: gnupg, zenity
#


GUI=1
TEMP=`mktemp /dev/shm/tmp.XXXXXX`
#rm -f $TEMP

HASH=`sha1sum $0`
COMMAND=$1
FILE=$2


# Ensure to remove file even after unexpected terminations
trap "{ rm -f $TEMP; }" 0 1 2 5 15


if [ "$GUI" == "0" ]
then
	echo $HASH
	echo -n "Give me the password to use:"
	read -s PW
	echo
else
	PW=`/usr/bin/zenity --entry --hide-text --title="Warning!" --text="Enter password:"`
	#PW=`/usr/bin/zenity --entry --hide-text --title="Warning!" --text="$HASH, Enter password:"`
fi


# Decrypt the file
#echo $PW | /usr/bin/gpg -q --decrypt --passphrase-fd 0 -o $TEMP $FILE &> /dev/null
echo $PW | /usr/bin/gpg -q --decrypt --passphrase-fd 0 $FILE 1>$TEMP 2>/dev/null

if [ $? -ne 0 ]
then
	rm -f $TEMP
	echo "Error during decrypting!"
	echo "Exiting."
	echo
	exit 1
else
	# Open file
	$COMMAND $TEMP 2> /dev/null

	# Safety backup and delete (gpg cannot overwrite without confirmation)
	mv $FILE $FILE.bak

	# Encrypt back
	echo $PW | /usr/bin/gpg -qc --cipher-algo aes256 --passphrase-fd 0 \
		-o $FILE $TEMP &> /dev/null

	chmod 600 $FILE
	PW=""
fi

rm -f $TEMP
exit