Motivul pentru care acest lucru nu este posibil este, după cum au afirmat ceilalți, că un mesaj semnat nu poate fi falsificat. Desigur, un atacator este capabil să semneze orice mesaj, dar numai cu o cheie privată aparținând propriei chei publice/certificat.
Deci ceea ce se întâmplă este că:
- Alice semnează mesajul cu cheia ei privată, indicând cheia publică/certificatul;
- Alice criptează mesajul semnat cu cheia publică a lui Bob (deoarece PGP folosește semn-apoi-criptare);
- Bob primește mesajul și îl decriptează folosind cheia sa privată;
- Bob primește ID-ul cheii lui Alice și caută cheia publică / certificatul ei, aflând că este ea;
- Bob verifică că semnătura de sub mesaj este cea a Alicei.
Acum, Malory (MitM folosind numele normale) poate trimite, evident, mesaje criptate lui Bob, dar nu poate decripta mesajul lui Alice, deoarece nu are cheia privată a lui Bob.
În ceea ce privește generarea semnăturii: Malory ar putea să-și pună propria semnătură și să-și schimbe ID-ul, dar apoi mesajul nu ar fi de la Alice.
Desigur, acest lucru necesită ca Bob să cunoască și să aibă încredere în prealabil cheia publică/certificatul lui Alice, altfel Malory ar putea crea o pereche de chei și ar putea trimite cheia publică/certificatul lui Bob, usurându-se Alice. Cu PGP, această încredere este creată folosind o rețea de încredere.
Întrucât această rețea de încredere nu a fost niciodată atât de sigură pentru PGP, este foarte recomandat să se stabilească încrederea direct, de ex. prin trimiterea prin poștă a certificatului și apoi verificarea amprentei cheii prin telefon. PGP a fost proiectat având în vedere acest lucru (de exemplu, stabilirea unui sistem de amprentă ușor de verificat și solicitarea de încredere explicită a cheilor publice / certificatelor din depozitul de încredere).