Ist „add-apt-repository“ sicher vor einem bösartigen Netzwerk („MITM“)?

Ist „add-apt-repository“ sicher vor einem bösartigen Netzwerk („MITM“)?

Als ich es ausführte, war die Ausgabe etwas verdächtig:

# add-apt-repository -y ppa:ansible/ansible
gpg: keyring `/tmp/tmp85zwje4_/secring.gpg' created
gpg: keyring `/tmp/tmp85zwje4_/pubring.gpg' created
gpg: requesting key 7BB9C367 from hkp server keyserver.ubuntu.com
gpg: /tmp/tmp85zwje4_/trustdb.gpg: trustdb created
gpg: key 7BB9C367: public key "Launchpad PPA for Ansible, Inc." imported
gpg: Total number processed: 1
gpg:               imported: 1  (RSA: 1)
OK

Wir sollten Schlüssel nicht durch so kurze Zeichenfolgen identifizieren, da kollidierende Schlüssel-IDs generiert werden können inunter 5 Sekunden.

Antwort1

Machen Sie sich über diese Ausgabe keine Sorgen.

Obwohl GPG die veraltete Schlüssel-ID ausgibt, ruft apt-add-repository den Schlüssel tatsächlich mithilfe seines 160-Bit-Fingerabdrucks ab. (Der Fingerabdruck scheint über HTTPS abgerufen zu werden.)

https://bazaar.launchpad.net/~ubuntu-core-dev/software-properties/main/annotate/head:/softwareproperties/ppa.py#L163

def verify_keyid_is_v4(signing_key_fingerprint):
    """Verify that the keyid is a v4 fingerprint with at least 160bit"""
    return len(signing_key_fingerprint) >= 160/8


class AddPPASigningKey(object):
    " thread class for adding the signing key in the background "

    GPG_DEFAULT_OPTIONS = ["gpg", "--no-default-keyring", "--no-options"]

    def __init__(self, ppa_path, keyserver=None):
        self.ppa_path = ppa_path
        self.keyserver = (keyserver if keyserver is not None
                          else DEFAULT_KEYSERVER)

    def _recv_key(self, keyring, secret_keyring, signing_key_fingerprint, keyring_dir):
        try:
            # double check that the signing key is a v4 fingerprint (160bit)
            if not verify_keyid_is_v4(signing_key_fingerprint):
                print("Error: signing key fingerprint '%s' too short" %
                    signing_key_fingerprint)
                return False

verwandte Informationen