簡體   English   中英

將敏感數據從C傳遞到Java

[英]Passing sensitive data from C to Java

我正在開發一個C程序,該程序必須通過popen()調用Java main()並將一些數據作為命令行參數發送給它。 但是,還有一些數據需要從C發送到Java ,這實際上本質上是敏感的(盡管不是密碼類型)。

我正在嘗試查看是否有除加密之外的其他選項,可以將這些額外的數據從C發送到Java。 我試圖避免開銷,因為數據不那么敏感,無法進行加密,但是我對此有任何建議。

我無法通過popen()發送這些額外的數據,因為它將通過ps -f可見。

同樣,使用套接字似乎並不可行,因為tcpdump也可以顯示該信息。

我考慮使用共享mem (/dev/shm)但是也可以查看或使用隱藏文件。 因為,這還伴隨着每次調用創建文件的開銷,所以我並不完全贊成。

我看了ANON文件映射,但我想我不能在Java端使用它。 同樣,通過Java似乎無法使用fmemopen()引用。 FIFO管道會更好嗎? 還是可以輕松閱讀它們?

如果我只求助於簡單的mmap()並向其中寫入數據( 而不是在磁盤上創建它-在open call中沒有O_CREAT ),並且不執行msynch ,它將完全保留在內存中嗎? 然后可以從中讀取Java嗎?

加密是我唯一的選擇,還是我缺少基本知識?

鏈接討論了如何從C向Java發送純數據。

如果用戶可以使用tcpdump,則該用戶具有root訪問權限。 該用戶還可以在Java程序上放置調試器,甚至在加密數據之前,也可以確切地看到它的作用。 實現所需目標的唯一方法是采用完全模糊處理技術和加密,就像Skype客戶端所做的那樣1

但是,由於您同時說數據不是那么敏感,因此似乎有些過分。 也許是一種簡單的混淆技術,這樣偶然的觀察者看不到輸出就足夠了嗎? (建議使用Rocker 。)或者,或者確保“不受信任的”用戶在運行系統(Java + C程序)的服務器上沒有root用戶訪問權限。

不錯的2混淆和可能的折衷選擇是使用mmap()(或System V shared mem )進行通信。

如果使用MAP_LOCKED選項和MAP_ANONYMOUS ,則存儲區域將不會在磁盤上結束。 MAP_LOCKED阻止它進行交換,並且MAP_ANONYMOUS告訴操作系統不要使用備份文件。

另外,您是否考慮過使用JNI來訪問C代碼? 這樣,您的C代碼將成為Java流程的一部分,並且不受信任的用戶將需要調試器來監視正在發生的事情。


1 Skype客戶端不是不可能被監視,但是很難。 盡管這是有代價的,但在保持混淆技術完整的同時維護該代碼必須付出額外的成本。 這也是Skype編碼人員和研究人員試圖弄清楚其工作原理之間的軍備競賽。

2 這將使我停下很長時間,在弄清到底發生了什么之前,我必須閱讀很多有關調試技​​術的知識,然后進行大量工作才能弄清楚這兩個程序之間的“話題”。 一個更有才華的人可能最多在一個下午就破譯一切。

避免緊張的用戶使用數據的最佳方法是encr。 如果您仍然想要除一種方法以外的其他機制,則可以-
如果您的數據包含多種數據類型的混合,即int float char *等,則可以將數據轉換為二進制格式。 二進制數據不能被用戶直接讀取。 但是精打細算的用戶如果願意的話可以轉換回原始格式。 只有用戶願意時才可以對其進行加密。

但是不建議這樣做。 使用一些標准的編碼器。

暫無
暫無

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

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