非对称encryption的文件系统

我正在处理一些受特定法规pipe理的数据,这些数据必须以特定的方式处理。

我发现这个数据在我的一些日志文件中因系统按预期运行而结束。 我想find一种方法来logging接收数据的服务器上的消息,但是这样做的方式是数据在写入磁盘时被encryption,并且可能不会被同一台服务器解密。

我的想法是,应该有一个文件系统(写成一个FUSE系统或者什么 – 我正在使用Linux),将目录结构公开为明文,但是根据非对称密钥集的一半写入文件的内容。 这将允许我logging消息并将它们排队发送到解密密钥所在的日志服务器。

非对称encryption的低效(CPU方式)性质可能会使这种方法不可行,但是我怀疑可能有解决scheme。 我还没有find任何东西, 那里有解决scheme可以运行的解决scheme吗? 感谢您的任何提示!

我build议你在应用层做。

在这种情况下,然后将线程移动到StackOverflow,但是,我的答案将近似于:

  • 在大量数据(即任何地方)上使用非对称encryption的正常方式是使用它来encryption随机select的密钥,然后使用对称密码来encryption其余数据
  • 这是因为对称密码要快得多,而且通常会做更多你想要的

我会这样devise它,以便日志文件被写入块中,其中包含一个包含使用非对称密码encryption的密钥的头,然后使用对称密码来encryption一定数量的数据。

所以,举个例子,你可以使用AES / CBC来处理日志数据本身,这将会非常快(另外还有大量的实现)。

然后,每隔一段时间,您的应用程序就会丢弃密钥并启动一个新的“块” – 一旦密钥从RAM中消失,就不能再解密前一个块。

所以你可以使用(比如说)RSA来encryption(使用一个公钥)一个块的对称密钥,这个块将被安全地随机select。 对称密钥然后停留在内存中一段时间​​,直到块结束,并被擦除。

一个支持这个的文件系统将是有限的,因为你只能挂载它只写或只读; 操作系统通常不了解只写文件系统的概念:)

我做了一些研究,编码和文件。 这里是一个使用场景的链接…

https://github.com/S0AndS0/Perinoid_Pipes/blob/master/Documentation/Paranoid_Pipes_Scenario_One.md

…我只是写给你和服务器pipe理员面临类似的规定。 在投入生产之前对其进行testing并阅读警告。

我知道仅靠链接不足以回答这个问题,所以我会进入提议的解决scheme背后的思考过程。

因为日志是一次写成几行的,所以encryption的文件系统有点过分杀死,而且我所拥有的技能之外,脚本会自动设置一个特定的文件types( mkfifo ) – pipe道,以及一组脚本规则,用于侦听在命名pipe道文件上写入操作。 这一对文件然后生成第三个文件,一个你要求的,一个encryption的附加日志文件,主机无法读取。 脚本的操作与echo 'log message' | gpg -a -r [email protected] >> server.log相似 echo 'log message' | gpg -a -r [email protected] >> server.log为每个日志操作运行,但使用命名pipe道而不是| 脚本的逻辑处理gpg和附加到文件。 使用命名pipe道而不是匿名pipe道意味着只有日志生成服务的输出path需要更新才能使用命名pipe道的path,而不是使用encryption任务的标准文件。

请注意,还有一些其他function可能已经在烘焙 ,允许在达到用户指定大小时对日志文件进行encryption和电子邮件,这些function是分开的,以便IDS / IPS软件有机会parsing日志或使发货日志更难与每个写入encryption​​结合使用时可以进行窥探。

编辑/更新:亚可能想检查缩写快速启动的另一个问题,是在范围上更一般,但类似的足以保证包含在这个答案。

https://security.stackexchange.com/a/138877/82480

编辑/更新:看起来像在Markdown中的链接GitHub是非常特定于浏览器,所以这里是从上面的链接文档的情况之一的副本。

Web服务器的自定义使用情况

  • 下载并将脚本复制到${PATH}目录

“`

 git clone https://github.com/S0AndS0/Perinoid_Pipes cd Perinoid_Pipes cp Paranoid_Pipes.sh /usr/local/sbin/ chown ${USER}:${USER} /usr/local/sbin/Paranoid_Pipes.sh chmod 700 /usr/local/sbin/Paranoid_Pipes.sh 

“`

  • 显示可用的命令行选项及其当前值。

“`

 Paranoid_Pipes.sh --help 

“`

  • 设置命令行选项以在托pipe文件系统上的Web服务器应用程序和自定义脚本parsing器相同的文件系统中写入命名pipe道。

“`

 Paranoid_Pipes.sh --copy-save-yn='yes'\ --copy-save-name="/jailer_scripts/website_host/Web_log_encrypter.sh"\ --copy-save-ownership="notwwwuser:notwwwgroup"\ --copy-save-permissions='100'\ --debug-level='6'\ --listener-quit-string='sOmErAnDoM_sTrInG_wItHoUt_SpAcEs_tHaT_iS_nOt_NoRmAlY_rEaD'\ --log-level='0'\ --named-pipe-name="/jailed_servers/website_host/var/log/www/access.log.pipe"\ --named-pipe-ownership='notwwwuser:wwwgroup'\ --named-pipe-permissions='420'\ --output-parse-name="/jailed_logs/website_host/www_access.gpg"\ --output-parse-recipient="[email protected]"\ --output-rotate-actions='compress-encrypt,remove-old'\ --output-rotate-check-requency='25000'\ --output-rotate-max-bites='8388608'\ --output-rotate-recipient="[email protected]"\ --output-rotate-yn='yes'\ --output-save-yn='yes'\ --disown-yn='yes' --help 

“`

请注意,如果服务器应用程序不在chroot jail中,您将需要修改命名pipe道和脚本副本的文件path,因为上面假设已经实现了某种forms的文件系统隔离。 从上面删除--help以使脚本运行而不是打印命令行选项的当前值。

命名的pipe道文件path( --named-pipe-name文件path)应手动添加到Web服务器的日志loggingpath中,这对每个守护进程/服务器都是不同的,这样正常的客户端日志数据将被写入命名pipe道文件。

脚本副本(保存到--copy-save-name文件path)是通过侦听对其相关的命名pipe道文件的写入操作来实现的,它通过GnuPG推送logging的行并附加结果(使用公钥--output-parse-recipient用于初始encryption)到由--output-parse-name命令行选项指定的文件。

监控得到的encryption日志文件的文件大小,当写入计数器足够大时,使用--output-rotate-recipient公钥对文件进行重新encryption并移动/重命名。

如果您的服务器能够发送电子邮件,则修改--output-rotate-actions选项以将email作为有效的操作,最终将传输双重encryption的日志。

请注意,如果您使用两个不同的公钥进行encryption,那么您将需要相关的私钥以正确的顺序应用于解密。