מבוא ל-GnuPG

כתריאל טראום

katriel@penguin.org.il

היסטוריית גירסאות
גירסה 1.0 08-04-2007 כתריאל טראום
הומר לפורמאט ויקי
גירסה 1.0 2002-07-26 כתריאל טראום
גירסא ראשונה

זכויות יוצרים ורשיון

כל הזכויות שמורות © 2007, כתריאל טראום, הרשות ניתנת להעתיק, לשנות ולהפיץ מדריך זה תחת התנאים של רשיון ה-GFDL

Linux הוא סימן מסחרי רשום של Linus Torvalds.

הסרת אחריות

הכותב אינו נושא באחריות עבור שימוש ברעיונות, דוגמאות ומידע שבמדריך. השימוש הוא באחריות הקורא בלבד. המדריך עשוי להחיל טעויות ופרטים לא נכונים, שהשימוש בהם עשוי להיות מזיק למחשבך. למרות הסבירות הנמוכה, הכותב אינו לוקח כל אחריות

משוב

תגובות, תלונות, הערות והארות לכתובת הנ”ל

מבוא

מה זה GnuPG?

GPG (GNU Privacy Guard) היא תוכנת הצפנה ופיענוח חופשית שבאה להחליף את תוכנת ההצפנה/פיענוח - PGP.
GPG מכוסה ע”י רישיון ה - GPL, ואינה כוללת אלגוריתמים לקידוד/פיענוח שרשומים כפטנט.
GPG פותחה מהבסיס כתואמת לפרוטוקול ה - “OpenPGP (RFC2440)”

GPG תואמת את גירסא 5.x ומעלה של PGP (בזמן כתיבת מדריך זה, הגירסה הנוכחית היא 7.0.3). ניתן לקודד (encrypt) ולודא (verify) מידע ומפתחות שנוצרו ב- PGP.
GPG רצה על רוב גרסאות ה - UNIX, ועל Win98/NT/2000.

למה ואיפה נשתמש ב - GnuPG

במילה אחת, דואר אלקטרוני. חישבו על כמות המידע שאנו שולחים ביום דרך הדואר האלקטרוני, מידע שנשלח בטקסט נקי, ללא הצפנה. חלקו אף מידע רגיש, שחשיפתו עלולה לגרום נזק לעסק.
מידע זה עובר דרך ארוכה עד שמגיע ליעדו. כל אדם בעל ידע טכני מספיק, יכול ליירט דואר זה: גורמים מתחרים, גורמים ממשלתיים (אף פעם אי אפשר להיות פרנואידי מידי בנושאים אלן)

GPG תדאג שרק אתה והמקבל יוכלו לקרוא את תוכן ההודעה.
GPG תדאג שהדואר שנשלח יגיע ליעדו שלם, ומבטיחה שתוכן המסר לא שונה.

איך עובד ה - GnuPG?

GPG, בדומה ל - SSH, עובד בעזרת זוג מפתחות הצפנה (Keypair), מפתח אחד ציבורי ואחד פרטי.
מפתחות אלו הם יחודיים. לכל מפתח פרטי, יש מפתח ציבורי אחד (וההפך כמובן).
המפתח הציבורי, יכול להיות מופץ לכל דורש ומבקש, בכשי שיוכלו להצפין מידע לך. מצד שני, המפתח הפרטי צריך להשמר חסוי בכל מחיר.

  • המפתח הציבורי שלך משמש אחרים להצפין דואר וקבצים שרק אתה תוכל לקרוא. המפתח הציבורי גם מאפשר לאחרים לודא (Verify) שהמידע שהגיע הגיע באמת ממך.
  • המפתח הפרטי שלך מאפשר פענוח מידע שנשלח אליך, והוצפן ע”י המפתח הציבורי שלך. המפתח גם מאפשר להצפין את המידע שלך כך שרק אתה יכול לקרוא אותו

עוד על GnuPG

מדריך זה הוא ברובו תרגום של ה - User Manual של GPG. מדריך זה הוא רק מדריך בסיסי, ל - GPG עוד הרבה פונקציות ותכונות שימושיות. כדי ללמוד עוד על - GPG מומלץ לקרוא את שאר ה - User Manual שנמצא ב - http://www.gnupg.org/gph/en/manual.html

עבודה מעשית עם GnuPG

יצירת מפתחות

הפרמטר –gen-key ישמש אותנו ליצירת זוג המפתחות:

$ gpg --gen-key
gpg (GnuPG) 1.0.4; Copyright (C) 2000 Free Software Foundation, Inc.
This program comes with ABSOLUTELY NO WARRANTY.
This is free software, and you are welcome to redistribute it
under certain conditions. See the file COPYING for details.

gpg: Warning: using insecure memory!
gpg: /home/ktraum/.gnupg/secring.gpg: keyring created
gpg: /home/ktraum/.gnupg/pubring.gpg: keyring created
Please select what kind of key you want:
(1) DSA and ElGamal (default)
(2) DSA (sign only)
(4) ElGamal (sign and encrypt)
Your selection?

GPG יכול ליצור כמה סוגי מפתחות, אבל מפתח חייב להיות מסוגל לבצע חתימות (signatures), לכן יש 3 אפשרויות.

  1. יוצרת בעצם 2 זוגות של מפתחות, זוג DSA עיקרי, שמשמש לחתימה בלבד, וזוג נוסף, מסוג ElGamal, נוצר בשביל הצפנה.
  2. זהה, אך יוצרת רק זוג מסוג DSA.
  3. יוצרת רק מפתח מסוג ElGamal, שבו ניתן להשתמש גם בשביל חתימה וגם בשביל הצפנה.

בכל מקרה, ניתן לאחר מכן להוסיף לאחר מכן מפתחות נוספים להצפנה או חתימה. לרוב המשתמשים, אופציה מס' 1 תספיק.

בנוסף, יש לציין את את גודל המפתחות, גודל מפתח ה- DSA חייב להיות בין 512 ו - 1024 ביטים, ומפתח ה - ElGamal יכול להיות בכל גודל. GPG דורש כי גודל המפתח המינימלי יהיה 768 ביטים, כך שאם ציינתם גודל מעל 1024, גודל ה - DSA ישאר 1024, אך ה - ElGamal יהיה גדול יותר.

DSA keypair will have 1024 bits.
About to generate a new ELG-E keypair.
minimum keysize is 768 bits
default keysize is 1024 bits
highest suggested keysize is 2048 bits
What keysize do you want? (1024)

ככל שהמפתח גדול יותר, יהיה קשה יותר לפצח אותו, אך לרוב, הגודל הסטנדרטי, 1024 ביטים יספיק. בנוסף תהליך ההצפנה/פענוח אורך ככל שהמפתח גדל. אחרי שנבחר הגודל, לא ניתן לשנותו יותר.

כעת יש לבחור תאריך תפוגה למפתחות

Please specify how long the key should be valid.
0 = key does not expire
<n> = key expires in n days
<n>w = key expires in n weeks
<n>m = key expires in n months
<n>y = key expires in n years
Key is valid for? (0)

לרוב מפתח שאינו פג, יספיק. יש לשים לב, למרות שניתן לשנות את תאריך תפוגת המפתח, יהיה קשה להפיץ אותו מחדש לכל מי שמשתמש בו.
בעת יצירת המפתח, יש לספק שם משתמש (User ID), כדי שהמפתח יהיה מקושר למשתמש ממשי.

You need a User-ID to identify your key; the software constructs the user id
from Real Name, Comment and Email Address in this form:
"Heinrich Heine (Der Dichter) "

Real name:
Email address:
Comment:

ניתו ליצור רק משתמש אחד בזמן יצירת המפתח, אך מאוחר יותר ניתן להוסיף עוד זהויות, אם המפתח משמש גם תחת תפקיד אחר. GPG צריך משפט סיסמא כדי להגן על המפתחות שבשימושך.

You need a Passphrase to protect your private key.

Enter passphrase:

אין הגבלה על אורך הסיסמא. הסיסמא היא אחת מנקודות החולשה הגדולות של - GPG, מכיון שזו ההגנה היחידה שיש אם המפתח הפרטי נחשף למישהו אחר. סיסמא טובה, לא תכלול מלים שקיימות במילון, ותכלול אותיות ומספרים. סיסמא חזקה חשובה מאוד לשימוש נכון ב - GPG.

יצירת תעודת ביטול (Revokation Certificate)

אחרי יצירת מפתח, יש ליצור תעודת ביטול למפתחות אלו, למקרה שבעתיד, תישכח הסיסמא או המפתח הפרטי יחשף. תעודת הביטול תהיה סימן להפסיק להשתמש במפתח שבוטל.
עדיין ניתן להשתמש במפתח שבוטל על מנת לודא חתימה שלך שבוצעה לפני שהמפתח בוטל, אך לא ניתן להשתמש בו להצפנת מידע בשבילך. ניצן גם לפענח מידע שנשלח לך לפני ביטול המפתח, אם יש עוד גישה למפתח המבוטל.

$ gpg --output revoke.asc --gen-revoke mykey
[...]

הפרמטר mykey צריך להיות מזהה המפתח (key ID) או כל חלק מהמפתח מזיהוי המפתח (User ID) שמזהה את המפתח. תעודת הביטול שתופק תישמר בקובץ output.asc, אם לא יפורט פרמטר ה - –output, התוצאה תודפס לפלט הסטנדרטי, מיכיוון שהתעודה היא קצרה, יתכן שתרצה להדפיסה ולשומרה במקום בטוח.

בכל מקרה, את התעודה אין לאחסן במקום נגיש לכל. כל אחד יכול לשלוח את התעודה ולבטל את המפתח שלכם.

החלפת מפתחות

רשימת המפתחות

כדי לתקשר אם אחרים, יש צורך בשיטה להחלפת מפתחות ציבוריים. כדי לקבל את רשימת המפתחות שלך:

$ gpg --list-keys
/home/ktraum/.gnupg/pubring.gpg
---------------------------------------
pub 1024D/BB7576AC 1999-06-04 Someone (My Comment)
sub 1024g/78E9A8FA 1999-06-04
ייצוא מפתחות

כדי לשלוח את המפתח הציבורי, יש לייצא אותו לקובץ. הפקודה –export, תבצע זאת, הפקודה מקבלת פרמטר נוסף שמציין איזה מפתח ליצא. כמו בפקודת ה - gen-revoke, יש לספק את זיהוי המפתח או אחד מהפרטים המזהים של המפתח.

$ gpg --output someone.gpg --export some@email.com

המפתח מיוצא בפורמט בינארי, אך זה יכול להיות לא נוח, כאשר המפתח נשלח דרך דואר אלקטרוני או נמצא על דף אינטרנט. לכן ל - GPG יש פקודה שנקראת –armor, שגורמת למפתח המיוצא להיות בפורמט ASCII-armored. בכלליות, כל פלט של GPG, יכול להיות בפורמט ASCII, אם מצוינת אופציית ה - armor.

$ gpg --armor --export some@email.com
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1.0.4 (GNU/Linux)
Comment: For info see http://www.gnupg.org

[...]
-----END PGP PUBLIC KEY BLOCK-----
יבוא מפתח

ניתן להוסיף מפתח ציבורי לרשימת המפתחות ע”י פקודת ה –import.

$ gpg --import someother.gpg
gpg: key 9E98BC16: public key imported
gpg: Total number processed: 1
gpg: imported: 1

$ gpg --list-keys
/home/ktraum/.gnupg/pubring.gpg
---------------------------------------
pub 1024D/BB7576AC 1999-06-04 Someone (My comment)
sub 1024g/78E9A8FA 1999-06-04

pub 1024D/9E98BC16 1999-06-04 Someother (Other comment)
sub 1024g/5C8CBD41 1999-06-04

אחרי שהמפתח יובא, יש לודא את תקפות המפתח (Validate), ע”י חתימתו בעזרת המפתח האישי. GPG משמש במנגנון אימות חזק וגמיש על כל מפתח שמיובא, לכן לא חובה לחתום על כל מפתח שמיובא. למרות זאת, ייתכן כי יתעורר צורך לודא תקפות באופן אישי של מפתחות מיובאים.
וידוא תקפות המפתח מתבצעת ע”י טביעת האצבעות (Fingerprint) של המפתח, וחתימת המפתח אחרי. טביעת האצבעות (fingerprint) של מפתח ניצנת לצפייה בקלות ע”י פקודת –fingerprint, אך כדי לחתום מפתח, יש לערוך אותו.

$ gpg --edit-key other@email.com

pub 1024D/9E98BC16 created: 1999-06-04 expires: never trust: -/q
sub 1024g/5C8CBD41 created: 1999-06-04 expires: never
(1) Someother (Other comment)

Command> fpr
pub 1024D/9E98BC16 1999-06-04 Someother (Other comment)
Fingerprint: 268F 448F CCD7 AF34 183E 52D8 9BDE 1A08 9E98 BC16

וידוא טביעת האצבע של מפתח תעשה מול הבעלים של המפתח, בכל צורה שהיא, כל עוד בטוחים כי האדם הוא אכן בעל המפתח האמיתי. אחרי וידוא המפתח ניתן לחתום אותו כדי לתת לו תוקף. מכיוון שוידוא תוקף מפתח הוא עיניין רגיש במערכת שמתשמשת במפתחות ציבוריים, יש לנהוג הזהירות, ותמיד לודא תקפות מפתח לפני שחותמים אותו:

Command> sign

pub 1024D/9E98BC16 created: 1999-06-04 expires: never trust: -/q
Fingerprint: 268F 448F CCD7 AF34 183E 52D8 9BDE 1A08 9E98 BC16

Someother (Other comment)

Are you really sure that you want to sign this key
with your key: "Someone (My commnet)

Really sign?

אחרי שהמפתח ניתן לבדוק את רשימת החתימות הקיימות על המפתח. כל זיהוי משתמש (ניתן לבצע כמה, זוכרים?) במפתח יכיל חתימה עצמית, ואת רשימת המפתחות שחתמו אותו.

Command> check
uid Someother (Other comment)
sig! 9E98BC16 1999-06-04 [self-signature]
sig! BB7576AC 1999-06-04 Someone (My comment)

הצפנה ופענוח של קבצים

למפתח הציבורי והפרטי יש תפקידים שונים בתהליך ההצפנה והפיענוח של מסמכים. המפתח הציבורי ישמש להצפנת המידע, באופן שרק בעל המפתח הפרטי שתואם את המפתח הציבורי יוכל לפענח את המידע.

התהליך הוא די פשוט: אם Someother רוצה להצפין מידע ל - Someone, הוא ישתמש במפתח הציבורי שלו, ו - Someone ישתמש במפתח הפרטי שלו לפיענוח הקובץ. אם Someone רוצה להצפין מידע ל - Someother, הוא ישתמש במפתח הציבורי של Someother, ו - Someother ישתמש במפתח הפרטי שלו לפענח את המידע.

כדי להצפין קובץ, משתמשים בפקודת –encrypt של GPG. כמובן שכדי להצפין קובץ למישהו, חייב להיות ברשותנן המפתח הציבורי שלו. הפקודה תצפה לשם קובץ, אם הוא לא סופק, המידע ילקח מהקלט הסטנדרטי (Standart Input). המידע המוצפן ישלח לפלט הסטנדרטי, אלא אם פורט קובץ בעזרת –output.
הקובץ הנבחר גם מכווץ בנוסץ להצפנה:

$ gpg --output somedoc.txt.gpg --encrypt --recipient other@email.com somedoc.txt

הפרמטר –recipient, יקבל את שם המפתח הציבורי שישמש להצפין את הקובץ. לכל נמען נשתמש שוב בפקודה –recipient. עכשיו ניתן יהיה לפענח את הקובץ רק ע”י המפתח הפרטי התואם.
אי אפשר לפענח מסמך שהוצפן על ידך, לעצמך, אם לא השתמשת במפתח הציבורי שלך. כדי לפענח את הקובץ, נשתמש בפקודת –decrypt:

$ gpg --output somedoc.txt --decrypt somedoc.txt.gpg

You need a passphrase to unlock the secret key for
user: "Someother (Other comment) "
1024-bit ELG-E key, ID 5C8CBD41, created 1999-06-04 (main key ID 9E98BC16)

Enter passphrase:

מסמכים יכולים להיות מוצפנים גם בהצפנה סימטרית (symmetric encryption), בלי שימוש במפתח ציבורי. המפתח נוצר בהסתמכות על הסיסמא שתוכנס. בשביל אבטחה טובה, לא כדאי לתת את אותה הסיסמא שמגנה על המפתח הפרטי. הצפנה סימטרית היא חזקה יוצר מהצפנה בשיטת המפתח הציבורי/פרטי. מומלץ להשתמש בה כאשר אין צורך להעביר את הסיסמא לאחרים, למשל בהצפנת קבצים מקומיים.

$ gpg --output somedoc.txt.gpg --symetric somedoc.txt
Enter passphrase:

חתימה דיגיטאלית

בעזרת חתימה דיגיטלית, ניתן לודא את אמיתות מקור הקובץ, בנוסף, חתימה דיגיטלית תוסיף חתימת זמן (timestamp). אם הקובץ שונה בכל דרך שהיא אחרי החתימה, וידוא התוקף לא יצליח. חתימה דיגיטלית יכולה לשמש כחתימה ידנית, בתוספת אישור כי המסמך/קובץ לא שונה.

חתימה ווידוא חתימה נעשים בשיטת המפתח הציבורי/פרטי. לדוגמא, אם Someone רוצה לחתום על קובץ ל - Someother, הוא ישתמש במפתח הפרטי שלו על מנת לחתום, ו - Someother ישתמש במפתח הציבורי של Someone כדי לודא את החתימה. כדי לחתום קובץ נשתמש בפקודה –sign:

$ gpg --output somedoc.txt.sig --sign somedoc.txt

You need a passphrase to unlock the private key for
user: "Someone (Some comment)
1024-bit DSA key, ID BB7576AC, created 1999-06-04

Enter passphrase:

המסמך עובר כיווץ לפני שהוא מוצפן, והפלט יהיה בינארי.

כאשר באים לודא חתימה על מסמך, יש שתי אופציות: לבדוק את החתימה או לבדוק את החתימה, ולהוציא את הקובץ המקורי. כדי לבדוק את החתימה נשתמש בפקודה –verify. כדי לבדוק ולהוציא את הקובץ, נשתמש ב – decrypt.

$ gpg --output somedoc.txt --decrypt somedoc.txt.sig
gpg: Signature made Fri Jun 4 12:02:38 1999 CDT using DSA key ID BB7576AC
gpg: Good signature from "Someone (Some comment)

שימוש נפוץ בחתימה דיגיטלית הוא בדואר אלקטרוני או Newsgroups, במקרים כאלה לא נרצה לכווץ את הקובץ ולחתום אותו. האופציה –clearsign, תעטוף את המסמך בחתימה בפורמט - ASCII-armored, אך לא תשנה את תוכן ההודעה עצמה.

$ gpg --clearsign somedoc.txt

You need a passphrase to unlock the secret key for
user: "Someone (Some comment) "
1024-bit DSA key, ID BB7576AC, created 1999-06-04

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

[...]
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.0.4 (GNU/Linux)
Comment: For info see http://www.gnupg.org

iEYEARECAAYFAjdYCQoACgkQJ9S6ULt1dqz6IwCfQ7wP6i/i8HhbcOSKF4ELyQB1
oCoAoOuqpRqEzr4kOkQqHRLE/b8/Rw2k=y6kj
-----END PGP SIGNATURE-----

מקרה נוסף, הוא כאשר אנו לא רוצים לגעת בתוכן המקורי, ניתן ליצור חותמת לא מקושרת (Detached Signature). במקרה זה יווצר קובץ נוסף שיכיל את החתימה, ואילו קובץ המקור לא יפגע. נשתמש בפקודה –detach-sig:

$ gpg --output somedoc.txt.sig --detach-sig somedoc.txt

You need a passphrase to unlock the secret key for
user: "Someone (Some comment) "
1024-bit DSA key, ID BB7576AC, created 1999-06-04

Enter passphrase:

במקרה כזה, נזדקק גם לקובץ המקוי וגם לקובץ החתימה על מנת לודא את שלמות הקובץ. נשתמש בפקודה –verify לבצע אימות.

$ gpg --verify somedoc.txt.sig somedoc.txt
gpg: Signature made Fri Jun 4 12:38:46 1999 CDT using DSA key ID BB7576AC
gpg: Good signature from "Someone (Some comment) "
מדריכים/מבוא_ל-gnupg.txt · שונה לאחרונה ב: 2008/06/19 18:34 (עריכה חיצונית)
chimeric.de = chi`s home Creative Commons License Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0