我们使用node.js和express作为AES256单独编码数据的服务器网关。数据(和服务器代码)位于我们工厂严密锁定的房间中的单个服务器上,只能通过硬线以太网访问。接入点是专用的硬连线设备。如果有人能够窃取该服务器,他们就可以访问源代码。他们会为我们的编码数据提供密钥和解码算法。
如果我们编译了JavaScript node.js代码并且只在服务器上保留了代码(而不是JavaScript源代码),该怎么办?
编译过程是否提供足够的安全性,以便有动力的窃贼无法识别正在使用的编码/解码技术来保护存储的加密数据?
答案 0 :(得分:4)
编译过程是否提供足够的安全性,以便有动力的窃贼无法识别正在使用的编码/解码技术来保护存储的加密数据?
没有
首先,你没有说“编译过程”的真正含义。没有使用Javascript的过程类似于将C ++编译为二进制汇编代码。 Javascript是一种解释型语言,而不是编译语言。 Javascript解释器可以在JS引擎内部执行编译步骤,但这不是您自己可以做的事情。 node.js Javascript引擎需要纯文本合法Javascript作为输入。
因此,您在Javascript代码上运行的任何编译过程都会压缩并且可能会使其模糊不清。它仍然是纯文本的Javascript代码。它仍然可以被任何人运行。任何人仍然可以诊断它的功能或工作原理。模糊它(比如用短的一个或两个字母名称替换描述性变量名称)使得分析代码并理解它需要更多的工作,但它只是一个暂时的障碍仍然可以被任何坚定的黑客克服。
如果有人能够窃取该服务器,他们就可以访问 到源代码。他们将拥有密钥和解码算法 我们的编码数据。
您需要物理安全地访问您的服务器以及该服务器上的代码以保护它,您需要依赖该保护。
如果您使用的是创建可运行.exe文件的打包工具,请记住,这并不是真正编译您的Javascript。它只是将它打包到.exe的shell中,以便本机代码.exe可以运行,可以从.exe中提取你的Javascript,可以将它放在硬盘上的临时文件中,然后可以执行node.js传递它是Javascript源文件。这是一个打包步骤,而不是二进制编译步骤。现在,EXE中的包可能是二进制压缩的,但是当代码传递给node.exe时,它仍然是纯文本Javascript,仍然可以被确定的黑客看到。
答案 1 :(得分:0)
你的问题没有得到适当的缓解。无论你有多少跳跃让一个坏演员跳过,无论多么不透明,它仍然在一台服务器上。
查看解密需要将从未保存到该计算机上的磁盘的密钥的解决方案,而不是每当您的应用程序(或更好的,整个服务器)启动时安全检索,例如硬盘加密在主操作系统甚至可以加载之前必须成功的程序。