Dovecot
郵箱即時解密(dovecot)
為了避免對 IMAP 伺服器進行隨意的郵箱窺探,我正在考慮“透明加密”設置,該設置將:
- 公鑰在本地傳遞時加密傳入消息
- 私鑰在讀取時解密所述消息。(這裡,私鑰密碼是一個,與郵件帳戶密碼相同)
(見底部的基本原理)。
考慮到 procmail 和一些過濾腳本,第 (1) 點應該很容易。我無法找到 (2) 的現有技術,其中涉及篡改 IMAP 伺服器(在我的情況下,dovecot:這可能意味著一個特殊用途的外掛)。
想法,有人嗎?
理由:
通過這種設置,消息將在伺服器上加密,但使用者不必在他們的 MUA 上安裝笨重的(對於未啟動的)GnuPG 外掛。獲得所有公鑰/私鑰對和郵箱的破解者仍然必須破解密碼才能訪問內容
預設情況下 %w 變數不可用,但您可以添加它。
我稍微擴展了 Dovecot wiki 中給出的範例,以展示一種處理密鑰管理的方法。這通過了一些低強度的測試(我可以傳遞、閱讀、移動郵件)。
#!/bin/bash # Keys generated using: # # fingerprint=$(echo -n "${imap_password}" | gpg2 --batch --passphrase-fd 0 --quick-gen-key "Mail encryption key <${imap_user}>" ed25519 2>&1 | fgrep 'revocation certificate stored as' | sed -e 's/.*\///' -e 's/\..*//') # echo -n "${imap_password}" | gpg2 --batch --passphrase-fd 0 --quick-add-key "${fingerprint}" cv25519 # # Call this from dovecot with: # # plugin { # mail_filter = mail-filter read %u %{userdb:pass} # mail_filter_out = mail-filter-out write %u # } # # And configure dovecot to pass the un-encrypted mail password through: # # passdb { # driver = passwd-file # args = scheme=CRYPT username_format=%u /etc/dovecot/users # override_fields = userdb_pass=%w # } export GNUPGHOME="/srv/mail/.gnupg" imap_user="$2" tempfile=$(mktemp) cat > "${tempfile}" if [ "$1" == "write" ]; then gpg2 --armor --batch --encrypt -r "${imap_user}" < "${tempfile}" elif [ "$1" == "read" ]; then imap_password="$3" echo -n "${imap_password}" | gpg2 --quiet --batch --passphrase-fd 0 --decrypt "${tempfile}" fi rm -f "${tempfile}"
顯然還有很大的改進空間——添加錯誤檢查、不在磁碟上以明文形式緩衝消息、使用冒號分隔的輸出正確呼叫 GPG、檢測磁碟上的未加密郵件等等。