iT邦幫忙

0

一個關於非對稱加密的使用案例討論

關於非對稱加密的精神我大致上參考WIKI上的說明如下:
https://zh.wikipedia.org/wiki/%E5%85%AC%E5%BC%80%E5%AF%86%E9%92%A5%E5%8A%A0%E5%AF%86

我有一個案例,想將一個加密檔案放在公開的網域供所有知道連結位址的人進行下載,但我希望只有擁有密鑰的特定使用者們可以解密這個檔案,目前我能想到的做法有二:

1.以我的公鑰加密檔案,並將我的私鑰給予特定使用者們用於解密。
公鑰用作加密、私鑰用作解密,符合WIKI中的描述,但隨便把自己的私鑰給予別人應該是錯的?
2.以我的私鑰加密檔案,並將我們公鑰給予特定使用者們用於解密。
私鑰用作加密、公鑰用作解密,與WIKI中描述的描述相異,但將公鑰給予別人似乎又是比較正確的作法?

請問像這種案例我應該怎麼做才比較正確呢?

補充說明:

由於今日剛註冊我還沒有回應的權限,在此說明一下為什麼我沒有直接使用密碼加密檔案,然後將密碼直接給這些使用者。

我的考量點是如果使用單一密碼方案,擁有密碼的人就可以自行產生加密的檔案了。如此一來如果我的儲存空間管理權限被取得,該人又擁有密碼,他就可以產生有害的加密檔案去讓其他使用者下載。

如果用比較具體的類比,我想實現的是:只有我能產生上鎖的箱子,沒鑰匙的人就算拿到上鎖的箱子也沒用,但我可以打好幾把鑰匙給特定的幾個人,這些人可以拿鑰匙去看箱子裡裝了什麼、但不能自己產生上鎖的箱子。

希望這些補充說明能更具體的描述我的問題,謝謝大家。

樓主可能誤會了,當你要把加密檔案給A,是用 A 的公鑰加密,不是用自己的加密
這中間會有一個協定交握的流程,所以根本不需要把自己的私鑰給別人
這才是非對稱加密的作法,你的加密檔案給B,要用B的公鑰加密,B才能解密
說到這裡就能知道非對稱加密不是樓主需要的應用,但基本上在某些加密系統上,你去下載檔案時,就會上傳自己的公鑰進行加密,下載下來之後就會用私鑰解密
所以基本上是應用平台的問題跟是不是使用非對稱加密協定沒有關係
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
6
納貝
iT邦新手 1 級 ‧ 2021-05-03 15:47:46
最佳解答

非對稱加密用在 "傳送一個機密檔案" 時
只能是 "用公鑰加密、用私鑰解密" ,所以必須是接收方先利用工具產生一組非對稱加密,就是public key, private key。然後接收方把公鑰給傳送方,傳送方用公鑰加密文件,然後接收方再用私鑰(private key)解密。這個過程,public key可以是任何人都可以取得,但是唯有接收方擁有解密的私鑰可以來解密文件。

另外補充,如果非對稱加密用在 "用私鑰加密、用公鑰解密" 的時候
主要是在告訴大眾,我這個官方文件或app或重大宣告等等,是經過官方認證的內容,用來證明該內容的完整性、沒有被駭客修改過、有著官方認證的性質在。原理就是發送者把要準備發送的文件先提取HASH值,然後用自己的私鑰加密(只有官方擁有私鑰),然後一般大眾在下載這個app或文件的時候,把自己接收到的內容提取HASH值,再比對照官方給的HASH值(利用官方的公鑰解密而來)看是不是一樣,就可以證明內容無誤!

你的情況更適合使用對稱加密,就是加密、解密用同一把secret key,這時候怎麼去把這個secret key安全的交給對方就是一門學問了,網路上有很多講這個的 key distribution

看更多先前的回應...收起先前的回應...

謝謝你的回覆,讓我想到我的需求具體的實現方式了。

加密:
1.以對稱加密secret key加密檔案,並把secret key交給每個特定使用者們。
2.把我的非對稱加密public key交給每個特定使用者們。
3.以我的非對稱加密private key跟hash演算法產生數位簽署過的加密檔案。
4.將數位簽署過的加密檔案放上公開的網域。

解密:
1.特定使用者們下載數位簽署過的加密檔案。
2.以我的非對稱加密public key驗證簽署過的加密檔案。
3.驗證成功的話以對稱加密secret key解密檔案。

->沒有對稱加密secret key的人就算下載了數位簽署過的加密檔案也沒用。
->特定使用者們因為沒有我的非對稱加密private key所以無法產生數位簽署過的加密檔案。

納貝 iT邦新手 1 級 ‧ 2021-05-03 17:56:54 檢舉

你的方式就是類似TLS的運作方式,現今瀏覽器的主流protocol

如果是主流protocol的話,我使用起來也放心多了。

納貝 iT邦新手 1 級 ‧ 2021-05-03 18:06:03 檢舉

能靠自己想到這條路也是很神,看來你對密碼學應該蠻有興趣的

淺水員 iT邦大師 6 級 ‧ 2021-05-03 19:23:21 檢舉

這個方式,secret key 只是負責加密檔案
private key 只是用來產生數位簽章
那麼對於使用者私下散播 secret key 的問題是否需要考慮?

另外,TLS 應該比這個複雜很多...

納貝 iT邦新手 1 級 ‧ 2021-05-05 15:11:24 檢舉

seanhsu555
我糾錯一下我自己的說法,樓上師兄提醒了我。
TLS機制跟你的作法還是有點區別的,TLS的精髓是,用來加密message的那個對稱加密的secret key是使用者每次都隨機創建的(又叫做session key),之後才passs給server(利用server的public key來加密後傳輸),這樣大家就可以有共同的secret key了,而且還用完即棄。

1
wrxue
iT邦好手 1 級 ‧ 2021-05-03 15:18:13
  1. 對非對稱金鑰應用來說,給出私鑰是錯誤的。如果你還是想給對方私鑰,那不如就用對稱金鑰系統吧。
  2. 這樣就沒保護效果,畢竟理論上來說大家都知道你的公鑰

解法:使用對方的公鑰,加密給對方,對方有私鑰就能解

其實你就把檔案 zip 加密然後釋放出連結,再跟特定的人說加密金鑰是多少去解壓縮,不是一樣功能嗎?何必用到非對稱呢

0

我要發表回答

立即登入回答