gpt4 book ai didi

java - 将敏感数据从 C 传递到 Java

转载 作者:太空宇宙 更新时间:2023-11-03 23:51:47 26 4
gpt4 key购买 nike

我正在开发一个 C 程序,它必须通过 popen() 调用 Java main() 并作为命令行发送一些数据论证它。然而,还有一些数据需要从 C 发送到 Java,这在本质上是有些敏感的(尽管不是密码类型)。

我正在尝试查看除了加密之外是否还有任何其他选项可以将这些额外数据从 C 发送到 Java。我正在努力避免开销,因为数据没有加密那么敏感,但我愿意接受这方面的任何建议。

我无法通过 popen() 发送这些额外数据,因为它可以通过 ps -f 看到。

同样,使用套接字似乎也不可行,因为 tcpdump 也可以揭示该信息。

我考虑过使用共享的 mem (/dev/shm) 但也可以查看或使用隐藏文件。因为,这还伴随着为每次调用创建文件的开销,我并不完全赞成。

我查看了 ANON 文件映射,但我想,我不能在 Java 端使用它。同样,使用 fmemopen() 引用似乎无法通过 Java 实现。FIFO 管道会是更好的选择吗?或者它们也可以轻松阅读吗?

如果我只是求助于简单的 mmap() 并将数据写入其中(不在磁盘上创建它 - 在 open 调用中没有 O_CREAT),并且不执行 msynch 它会完全保留在内存中吗?然后我可以用 Java 读取它吗?

加密是我唯一的选择还是我缺少一些基本的东西?

link讨论了将纯数据从 C 发送到 Java。

最佳答案

如果用户可以使用 tcpdump,则该用户具有 root 访问权限。该用户还可以在您的 Java 程序上放置一个调试器,甚至在数据加密之前就可以准确地查看它的作用。实现您想要的目标的唯一方法是采用完全混淆技术和加密,就像 Skype 客户端所做的那样1

但是既然你同时说,数据不是那么敏感的,这似乎有点矫枉过正。也许一个简单的混淆技术使得输出对于一个不经意的观察者是不可见的就足够了吗? (如建议的 Rocker。)或者确保“不受信任”的用户在您的系统(Java + C 程序)运行的服务器上没有根访问权限。

体面的2 混淆和可能是一个很好的权衡,将是使用 mmap()(或 System V shared mem)进行通信。

如果您使用 MAP_LOCKED选项和 MAP_ANONYMOUS , 内存区域不会在磁盘上结束。 MAP_LOCKED防止它去交换,并且MAP_ANONYMOUS告诉操作系统不要使用备份文件。

此外,您是否考虑过使用 JNI相反,访问您的 C 代码?这样,您的 C 代码将成为 Java 进程的一部分,不受信任的用户将需要一个调试器来监视正在发生的事情。


1 Skype 客户端并非不可能被监视,但很难。不过,这是有代价的,在保持混淆技术完好无损的同时维护该代码的成本肯定会更高。这也是 Skype 编码员和试图弄清楚它如何工作的研究人员之间的军备竞赛。

2 这会让我停滞很长一段时间,在弄清楚到底发生了什么之前,我必须阅读大量调试技术,然后做大量工作才能弄清楚是什么两个节目之间的“谈”。一个更有才华的人可能最多在一个下午就能破译所有内容。

关于java - 将敏感数据从 C 传递到 Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18628399/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com