	
	<span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&amp;rfr_id=info%3Asid%2Focoins.info%3Agenerator&amp;rft.title=Wait%2C+Can+I+Really+%2ASign%2A+a+PDF%3F&amp;rft.aulast=Yee&amp;rft.aufirst=Raymond&amp;rft.subject=Uncategorized&amp;rft.source=Hypotyposis+on+a+Good+Day&amp;rft.date=2025-08-04&amp;rft.type=blogPost&amp;rft.format=text&amp;rft.identifier=https://hypotyposis.net/blog/2025/08/04/wait-can-i-really-sign-a-pdf/&amp;rft.language=English"></span>
	
	<span class="Z3988" title="ctx_ver=Z39.88-2004&amp;rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Adc&amp;rfr_id=info%3Asid%2Focoins.info%3Agenerator&amp;rft.title=Wait%2C+Can+I+Really+%2ASign%2A+a+PDF%3F&amp;rft.aulast=Yee&amp;rft.aufirst=Raymond&amp;rft.subject=Uncategorized&amp;rft.source=Hypotyposis+on+a+Good+Day&amp;rft.date=2025-08-04&amp;rft.type=blogPost&amp;rft.format=text&amp;rft.identifier=https://hypotyposis.net/blog/2025/08/04/wait-can-i-really-sign-a-pdf/&amp;rft.language=English"></span>
{"id":1710,"date":"2025-08-04T11:09:55","date_gmt":"2025-08-04T18:09:55","guid":{"rendered":"https:\/\/hypotyposis.net\/blog\/?p=1710"},"modified":"2025-08-04T11:09:55","modified_gmt":"2025-08-04T18:09:55","slug":"wait-can-i-really-sign-a-pdf","status":"publish","type":"post","link":"https:\/\/hypotyposis.net\/blog\/2025\/08\/04\/wait-can-i-really-sign-a-pdf\/","title":{"rendered":"Wait, Can I Really *Sign* a PDF?"},"content":{"rendered":"<hr \/>\n<p><em>A quick adventure in dusting off an old PGP key, hashing a file, and giving a recipient an easy-to-follow proof path.<\/em><\/p>\n<p>[written with the help of machine intelligence]<\/p>\n<hr \/>\n<h3>1 ? The problem that kicked it off<\/h3>\n<p>Last week my church sent me a rental agreement as a fill-in PDF. I filled it out, but before firing it back I wondered:<\/p>\n<blockquote>\n<p><em>Could I send something more trustworthy than \u201chere\u2019s the file, trust me\u201d without forcing the church admin (Diana) to install GPG or sign up for Keybase?<\/em><\/p>\n<\/blockquote>\n<p>I haven\u2019t seriously touched my PGP setup in years, but the idea of a lightweight, verifiable \u201csignature\u201d still appealed to the geek in me.<\/p>\n<hr \/>\n<h3>2 ? Taking inventory (a blast from 2013)<\/h3>\n<pre><code class=\"language-bash\">gpg --list-secret-keys<\/code><\/pre>\n<pre><code>sec   rsa2048 2013-12-10 [SC]\n      78E8E8E8B007206C2A5D9C83AA61D643ECB4CD2D\nuid           Raymond Yee &lt;raymond.yee@gmail.com&gt;<\/code><\/pre>\n<p>Aha\u2014my 2013 RSA-2048 key is still around. Keybase confirms it:<\/p>\n<pre><code class=\"language-bash\">keybase pgp list\n# PGP Fingerprint: 78e8e8e8b007206c2a5d9c83aa61d643ecb4cd2d<\/code><\/pre>\n<p>So Keybase and GPG agree: I still control the same key.<\/p>\n<hr \/>\n<h3>3 ? The lightweight signature plan<\/h3>\n<ol>\n<li>\n<p><strong>Hash the PDF<\/strong><br \/>\n(Because signing a small hash is friendlier than tacking a binary blob onto an email.)<\/p>\n<pre><code class=\"language-bash\">shasum -a 256 \"20250830 YeeRental.Signed.pdf\" \\\n > pdf_hash.txt\n# ? 47a97a11\u2026f1e4f7c  20250830 YeeRental.Signed.pdf<\/code><\/pre>\n<\/li>\n<li>\n<p><strong>Sign the hash with my PGP key<\/strong><br \/>\nUsing Keybase\u2019s wrapper so I don\u2019t have to juggle fingerprints:<\/p>\n<pre><code class=\"language-bash\">keybase pgp sign -i pdf_hash.txt -o pdf_hash.txt.asc<\/code><\/pre>\n<blockquote>\n<p><strong>Heads-up<\/strong>: Keybase warned me:<br \/>\n<code>Our PGP key \u2026 uses an insecure hash scheme (SHA1)<\/code><br \/>\nMore on that in the \u201cNext steps\u201d below.<\/p>\n<\/blockquote>\n<\/li>\n<li>\n<p><strong>Bundle three tiny files<\/strong><\/p>\n<pre><code>? 20250830 YeeRental.Signed.pdf       ? the contract\n? pdf_hash.txt.asc                   ? clear-signed hash\n? README-verification.txt            ? human instructions<\/code><\/pre>\n<\/li>\n<li>\n<p><strong>Give Diana the path of least resistance<\/strong><br \/>\nThe README points her to a zero-install SHA-256 site<br \/>\n(e.g., <a href=\"https:\/\/emn178.github.io\/online-tools\/sha256_checksum.html\">https:\/\/emn178.github.io\/online-tools\/sha256_checksum.html<\/a>):<\/p>\n<ol>\n<li>Drag the PDF ? see the 64-char hash.<\/li>\n<li>Compare it with the one in my signed message.<\/li>\n<li>If curious, paste the signed block into <a href=\"https:\/\/keybase.io\/verify\">https:\/\/keybase.io\/verify<\/a>.<br \/>\nShe\u2019ll see \u201cGood signature from rdhyee\u201d.<\/li>\n<\/ol>\n<\/li>\n<\/ol>\n<p>That\u2019s it: no local GPG, no Keybase account, just two web pages.<\/p>\n<hr \/>\n<h3>4 ? Did I actually send the signed bundle?<\/h3>\n<p>Of course not. In the heat of the moment I reverted to \u201cjust attach the PDF.\u201d<br \/>\nBut the exercise was worth it\u2014I now have a repeatable, recipient-friendly workflow ready for next time.<\/p>\n<hr \/>\n<h3>5 ? What the SHA-1 warning means &amp; my next moves<\/h3>\n<ul>\n<li>\n<p><strong>Why the warning?<\/strong><br \/>\nMy <em>primary UID self-signature<\/em> dates back to 2013 and was made with SHA-1. Modern GnuPG flags that as \u201clegacy.\u201d<br \/>\n(The signatures I just created use SHA-256, so the content I sign is fine. The warning just nudges me to modernize the key itself.)<\/p>\n<\/li>\n<li>\n<p><strong>Upgrade game-plan<\/strong><\/p>\n<ol>\n<li><strong>Generate a fresh key<\/strong> \u2014 ed25519 + separate encryption subkey.<\/li>\n<li><strong>Sign the new key with the old one<\/strong> to keep a verifiable chain of custody.<\/li>\n<li><strong>Upload the new key to Keybase<\/strong> (<code>keybase pgp select<\/code>).<br \/>\n(Keybase only holds one active PGP key, so the old one will move to the \u201crevoked\u201d tab\u2014or I can leave it un-revoked for legacy checks.)<\/li>\n<li><strong>Set a short expiration<\/strong> (one-year) and renew annually.<\/li>\n<li><strong>Back it up &amp; maybe move private material to a YubiKey<\/strong>.<\/li>\n<\/ol>\n<\/li>\n<\/ul>\n<p>Until then, my 2048-bit RSA key is still \u201cgood enough,\u201d but modern curves?shorter lifetimes are a cleaner future.<\/p>\n<hr \/>\n<h3>6 ? Take-aways<\/h3>\n<ul>\n<li>A PGP signature doesn\u2019t have to be intimidating\u2014hash-then-sign keeps the process email-sized and recipient-friendly.<\/li>\n<li>Keybase\u2019s \u201cpaste to verify\u201d page bridges techies and non-techies nicely.<\/li>\n<li>Even a dusty 2013 key can still serve, but updating keeps the warnings away and future-proofs my identity.<\/li>\n<\/ul>\n<p>Next time the church sends a form, I\u2019ll be ready\u2014with a shiny new ed25519 key and an even smoother README.<\/p>\n<hr \/>\n","protected":false},"excerpt":{"rendered":"<p>A quick adventure in dusting off an old PGP key, hashing a file, and giving a recipient an easy-to-follow proof path. [written with the help of machine intelligence] 1 ? The problem that kicked it off Last week my church &hellip; <a href=\"https:\/\/hypotyposis.net\/blog\/2025\/08\/04\/wait-can-i-really-sign-a-pdf\/\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"activitypub_content_warning":"","activitypub_content_visibility":"","activitypub_max_image_attachments":3,"activitypub_interaction_policy_quote":"","activitypub_status":"federated","footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[1],"tags":[],"class_list":["post-1710","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p7I6qs-rA","jetpack-related-posts":[],"_links":{"self":[{"href":"https:\/\/hypotyposis.net\/blog\/wp-json\/wp\/v2\/posts\/1710","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/hypotyposis.net\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/hypotyposis.net\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/hypotyposis.net\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/hypotyposis.net\/blog\/wp-json\/wp\/v2\/comments?post=1710"}],"version-history":[{"count":1,"href":"https:\/\/hypotyposis.net\/blog\/wp-json\/wp\/v2\/posts\/1710\/revisions"}],"predecessor-version":[{"id":1711,"href":"https:\/\/hypotyposis.net\/blog\/wp-json\/wp\/v2\/posts\/1710\/revisions\/1711"}],"wp:attachment":[{"href":"https:\/\/hypotyposis.net\/blog\/wp-json\/wp\/v2\/media?parent=1710"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/hypotyposis.net\/blog\/wp-json\/wp\/v2\/categories?post=1710"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/hypotyposis.net\/blog\/wp-json\/wp\/v2\/tags?post=1710"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}