Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
返回原始值的Java操作_Java_Algorithm_Security - Fatal编程技术网

返回原始值的Java操作

返回原始值的Java操作,java,algorithm,security,Java,Algorithm,Security,我目前正在开发一些安全代码。这段代码有一个特定的算法,不能更改。 如果有人对我的代码进行反编译,他们可以轻松地重新创建代码并对其进行反向工程,以便该人能够绕过该代码。即使它是模糊的。 我和一位朋友讨论了这个问题,他建议我添加一些无意义的操作。差不多 var1 += 1; var1 -= 1; 但是我需要一些不容易理解的方法,并且不应该非常消耗计算能力。 我主要使用长值,因此对Java长值进行一些操作将非常有用 应要求: 环境是linux系统。系统本身是安全的,但有可能有人能够获得编译后的代码

我目前正在开发一些安全代码。这段代码有一个特定的算法,不能更改。 如果有人对我的代码进行反编译,他们可以轻松地重新创建代码并对其进行反向工程,以便该人能够绕过该代码。即使它是模糊的。 我和一位朋友讨论了这个问题,他建议我添加一些无意义的操作。差不多

var1 += 1;
var1 -= 1;
但是我需要一些不容易理解的方法,并且不应该非常消耗计算能力。 我主要使用长值,因此对Java长值进行一些操作将非常有用

应要求: 环境是linux系统。系统本身是安全的,但有可能有人能够获得编译后的代码

该代码将用于对客户端进行身份验证。服务器和客户端将使用相同的代码。代码的主要目的是生成一个身份验证密钥,该密钥对于每个客户端都是唯一的,并且会经常更改

算法不是我设计的。我只是唯一一个可以正确编程的人

该算法的任务基本上是生成类似散列的内容。它使用几个不同的输入,其中一些是静态的,一些经常更改,然后返回一个字符串,其中包含客户端将用于身份验证的哈希。通信本身由SSL保护。因此,潜在的攻击者需要获取二进制文件本身。另外,一些变化的输入在二进制内部,而另一些则不在二进制内部

我知道模糊处理并不能阻止每一个攻击者,但我确信如果有一个像样的模糊处理,大多数攻击者都会失去兴趣。 我确信这一点,因为我们经常受到一些初学者黑客的攻击。他们中的大多数人甚至都懂Java,有些人足以阅读简单的模糊代码。这就是我们试图阻止理解我们算法的原因。我不能提供更多关于算法本身的细节。显然是出于安全原因。
该算法使用了许多长字符。我认为,如果有大量无意义的代码,这将为RE过程增加很多时间。我希望这足以描述环境和算法本身。如果没有,请提出更具体的问题

除了通过默默无闻的安全措施,你想做的事情永远不会是别的。就客户端身份而言,实际上没有什么可以添加到SSL提供的安全性中。只需在客户机上生成足够随机的ID,就像UUID一样,并将其安全地存储在客户机上。如果经常更改此ID,您甚至得不到什么好处。

如果没有更多信息,很难说最好的方法是什么,但值得一提的是,模糊处理是安全性的一个糟糕替代品。欢迎来到模糊处理的奇妙世界。如果您觉得有必要,自动字节码混淆工具是有市场的。使用其中一种可能比手动模糊处理更有效、维护更友好。但是,请注意,当攻击者可以访问该程序时,有时甚至当攻击者无法访问该程序时,任何东西都无法阻止确定的反向工程。即使算法和实现的每一个细节都暴露了,您的安全性也应该很强。找一份工作。但没有什么能让你免于一场坚决的攻击。如果你需要真正的安全性,最好是你的代码可以运行,它可以反编译和反向工程。对此你绝对无能为力。模糊处理只会在重新处理过程中增加几个小时的额外工作。为了理解算法,甚至可能不需要对代码进行模糊处理。这只是一个疯狂的想法,但是用另一种语言(如C)实现算法,只提供编译过的库,然后通过JNI使用该方法怎么样?这需要做更多的工作,也会影响性能,但可能会引起您的安全问题。一般原则是,您应该假设攻击者知道设计,而设计不容易更改,并使用密钥来保护它,这是很容易改变的——这也可以保护你免受指责,如果系统似乎已经损坏,你已经泄露了设计,这使得独立审查设计错误变得更容易。