簡體   English   中英

在鍵上使用來自 gpg --list-packets 的 output 來獲取 mpi 值以生成 s 表達式

[英]Using output from gpg --list-packets on a key to get the mpi values to generate s-expressions

我正在嘗試使用 gpg 生成的公鑰使用 libgcrypt 進行加密。 我在密鑰上使用 list packet 命令來獲取密鑰的內容並將 mpi 值解析為 s 表達式。 因此,當我嘗試使用我的公鑰對我的 session 密鑰進行編碼時,我收到錯誤“S 表達式中的奇數十六進制數”? 我認為列表數據包可能會給我沒有前導零的十六進制數字? 如果是這樣,我需要做什么才能獲得可以在 libgcrypt 中使用的 mpi 值?

您可以使用它來導出密鑰:

gpg2 --homedir . --export-options export-sexp-format --export-secret-key $KEYID

這將導出公鑰:

gpg --homedir . --export | openpgp2ssh $KEYID | ssh-conv | sexp-conv --syntax=hex

您可能需要以下工具包:

sudo apt-get install monkeysphere lsh-utils nettle-bin

我能夠通過使用pgpdump獲得我需要的所有 mpi 值。 請務必使用-i告訴它打印所有 integer 值。 唯一奇怪的是,Attilla 發布的公鑰命令開頭有兩個零,而 pgpdump output 沒有。 我不確定它們是否還需要。

在 gpg 和 libgcrypt 郵件列表的反復試驗和建議之后,list packet 命令確實會從 mpi 值中截斷前導零,因此,在以下情況下,您必須在 mpi 值前面加上零:

  • 十六進制字符串的長度是奇數(前加一個零)或
  • mpi 是一個負值(前置兩個零)。

作為進一步說明,使用列表數據包獲取 mpi 值是不明智的,因為它不能可靠地獲取 mpi 值,因為它應該是一個可能會更改的調試命令。 我發現獲取公鑰和私鑰的 mpi 值的最佳方法是直接解析密鑰的二進制導出,方法是使用帶有 RFC4880 的 export key 命令對其進行解碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM