2011-01-24 101 views
0

我在shell上使用openssl來加密數據,並希望稍後在ObjC/C/C++程序的運行時解密數據。由於我無法使用openssl庫工作,因此我從程序的「控制檯」中調用openssl,並使用popen()將解密後的結果返回到字符串中。這很好,但我不知道這種方法是否安全因爲「內部」使用它。通過管道使用openssl是安全的嗎?

感謝意見或暗示,因爲我還沒有發現任何東西在網絡上還沒有有效...
馬蒂亞斯

+0

我會推薦_not_,因爲Kjetil的回答中列出的原因。也許你可以打開另一個問題,並描述你在圖書館工作的困難? – 2011-01-24 14:12:01

+0

感謝您的即時回答!我怎樣才能將新的問題鏈接到這個線程?簡單回答可能會在OT討論中結束。 – Matthias 2011-01-24 14:58:34

回答

2

你可能暴露自己的一對夫婦更多的攻擊媒介,除此之外,它不是這比鏈接和使用OpenSSL庫要安全得多。

的程序,它就是你從POPEN運行可以通過argv的暴露更多的信息,如果你可以在命令行直接指定主要材料,做這樣的論點,這將通過的/ proc/<PID>被曝光/ cmdline(和ps/top/etc)。如果我要通過另一個進程解密並通過管道將其傳遞給另一個應用程序,那麼我最擔心的就是這些。作爲root用戶,如果您通過環境將密鑰材料傳遞給應用程序,他們也可以讀取/ proc/< pid & gt/environ,但如果他們是root用戶,那麼他們也可以執行各種其他惡意工作,不管使用哪種方法openssl(庫/二進制+管道),都可以容納你的東西。

還有一些其他的東西,比如用惡意代替openssl二進制文件,或者如果你讓popen/shell決定使用哪個openssl二進制文件,那麼在PATH中注入它,儘管如果他們能做到這一點,他們也可以得到通過更簡單的方法來保存密鑰材料和密文(或者他們可以替代或者LD_PRELOAD一個惡意的openssl庫,這樣可以很好地破壞動態鏈接到openssl)。窺探管道也是一樣,他們必須以root用戶或用戶身份運行。

簡而言之,如果你可以在不暴露任何敏感的情況下使用argv,那麼它的安全性不如使用OpenSSL庫的安全。是的,還有幾種方法可以控制你的東西,但是它需要它們以用戶的身份運行,無論如何都能夠控制你的東西(儘管它可能需要更多的努力) 。