【发布时间】:2013-09-05 05:25:26
【问题描述】:
我正在开发一个 C 程序,它必须通过 popen() 调用 Java main() 并将一些数据作为命令行参数发送给它。但是,还有一些数据需要从C 发送到Java,这在本质上有些敏感(但不是密码类型)。
我正在尝试查看除了加密之外是否还有其他选项可以将这些额外数据从 C 发送到 Java。我试图避免开销,因为数据并不像加密那样敏感,但我愿意接受这方面的任何建议。
我无法通过 popen() 发送这些额外数据,因为它可以通过 ps -f 看到。
同样,使用套接字似乎也不可行,因为tcpdump 也可以泄露这些信息。
我考虑使用共享mem (/dev/shm),但也可以查看或使用隐藏文件。因为,这也带来了为每次调用创建文件的开销,我并不完全赞成。
我查看了ANON 文件映射,但我想,我不能在 Java 端使用它。
同样,通过 Java 似乎无法使用 fmemopen() 引用。
FIFO 管道会是更好的选择吗?或者它们也可以轻松阅读?
如果我只是诉诸普通的 mmap() 并向其写入数据(不在磁盘上创建它 - 在公开调用中没有 O_CREAT),并且不执行 msynch 它将完全保留在内存中?然后我可以从中读取 Java 吗?
加密是我唯一的选择还是我缺少一些基本的东西?
link 讨论从 C 向 Java 发送纯数据。
【问题讨论】:
-
如果不受信任的用户具有特权(即 root),则只能通过
tcpdump看到数据。如果您试图阻止 root 访问信息,那么您就真正遇到麻烦了。 -
建议加密。
-
标准输入/标准输出呢?
-
任何技术的问题是,您要保护自己免受已经可以访问机器并已登录的特权用户的侵害。如果您不打算信任现有的审核机制来阻止用户窥探套接字连接,然后你就卡住了,超级用户可以使用适当的工具(例如,
gdb附加到你的进程)窥探任何解决方案。 -
@jxh - 我同意 tcpdump。我将套接字和隐藏文件方法视为相似。两者都会产生类似的间接费用。