Mi chiedo come il portachiavi identifica le applicazioni. Sospetto che ciò sia basato sulla firma del codice, ma gli esperimenti non sono coerenti con questo:
Funziona per i file eseguibili che non sono affatto firmati:
codesign -dv /Library/Frameworks/R.framework/Resources/bin/exec/R
# /Library/Frameworks/R.framework/Resources/bin/exec/R: code object is not signed at all
Ma il processo R viene aggiunto all'ACL di questo segreto e può interrogarlo felicemente ...
Non c'è anche nulla negli attributi estesi dell'eseguibile:
xattr -l /usr/bin/security
#
Se cambio il file stesso, funziona ancora:
cp /usr/bin/security foobar
echo "\nharmless" >> foobar
./foobar find-generic-password -a 'gaborcsardi' -s foobar -g
# keychain: "/Users/gaborcsardi/Library/Keychains/login.keychain"
# class: "genp"
# attributes:
# 0x00000007 <blob>="foobar"
# 0x00000008 <blob>=<NULL>
# "acct"<blob>="gaborcsardi"
# ...
# password: "secret"
Ma come funziona? Più in particolare, in che modo il portachiavi sa che la richiesta della password proviene dall'app security
, che ho specificamente autorizzato l'accesso a questa voce?