标签: cryptico

SSL over Javascript

我已经看到了一些类似的问题似乎并没有解决我的确切用例,我认为我已经找到了答案,但在安全性,RSA和几乎相当的时候,我总是一个菜鸟与之相关的一切.我对这些概念基本熟悉,但到目前为止我所做的所有实际实现都是关于编辑其他人的代码而不是生成我自己的代码.无论如何,我在这里:

我知道Javascript本身就是加密的好地方.有人可能会对你的回应进行调整并破坏JS,因此你最终会通过网络发送未加密的数据.它应该通过HTTPS SSL/TLS连接来完成,但是这种托管需要花钱,所以官方签名的证书应该是真实的连接.

话虽这么说,我认为我要这样做的方式绕过了JS加密的中间人的弱点,因为我只为一个RESTful加密一件事(一个密码哈希)服务调用,然后仅使用该密码哈希来签署来自客户端的请求,以便将它们作为来自请求声明的用户的身份验证.这意味着JS只负责在创建用户帐户时加密密码哈希,如果服务器无法解码该密码,那么它就知道它已经存在.

我还将保存一些客户信息,特别是$_SERVER['REMOTE_ADDR']为了保证某人没有MitM注册交换本身.

我正在使用PHP的openssl_pkey_函数生成非对称密钥,以及客户端的Cryptico库.我的计划是让用户向REST服务发送"预注册"请求,这将导致服务器生成密钥,将私钥和客户端信息存储在由电子邮件地址索引的数据库中,然后响应用公钥.

然后,客户端将使用公钥加密用户的密码哈希,并将其作为另一种请求类型发送到REST服务以完成注册.服务器将解密并保存密码哈希,使客户端信息和私钥无效,因此不能使用该信息进行进一步的注册,然后使用200状态代码进行响应.

要登录,用户可以输入他们的电子邮件地址和密码,密码将在注册期间进行哈希处理,附加到请求正文,然后再次进行哈希处理,以便向登录端点签署请求,该端点会尝试将存储的哈希附加到请求体并对其进行哈希处理,以根据请求中的签名验证签名,从而对用户进行身份验证.对服务的进一步数据请求将遵循相同的认证过程.

我错过了任何明显的漏洞吗?有可能将$_SERVER['REMOTE_ADDR']价值欺骗到具体的东西吗?我不需要IP地址准确或与用户登录时相同,我只需要知道"预先注册"并获得公钥的同一台机器跟进并完成注册而不是劫机者使用窥探公钥完成注册.当然,我想如果他们能够做到这一点,他们就会在创建时劫持帐户而不是恢复,合法用户将无法使用自己的密码完成注册,这也是可以的.

最重要的是,除非我派出真正的SSL主机,否则有人仍然会破解我的服务吗?我是否将Javascript的弱点作为加密工具?


当我编写和调试我的代码时,如果有人想使用它,我会在这里发布.如果我要离开我的网站进行任何攻击,请告诉我.

这些函数用于验证客户端请求以对头文件中的哈希,生成私钥,将其保存到数据库,使用公钥进行响应,以及解密和检查密码哈希.

        public function validate($requestBody = '',$signature = '',$url = '',$timestamp = '') {
            if (is_array($requestBody)) {
                if (empty($requestBody['signature'])) { return false; }
                if (empty($requestBody['timestamp'])) { return false; }
                if ($requestBody['requestBody'] === null) { return false; }

                $signature = $requestBody['signature'];
                $timestamp = $requestBody['timestamp'];
                $requestBody = $requestBody['requestBody'];
            }

            if (($requestBody === null) || empty($signature) || empty($timestamp)) { return false; } …
Run Code Online (Sandbox Code Playgroud)

php ssl openssl ssl-certificate cryptico

9
推荐指数
1
解决办法
843
查看次数

从 Cryptico.js 中提取 RSA 私钥

我相信这是一个非常基本的问题,但我正在开始研究 JavaScript 和 RSA,所以我有点迷茫。我刚刚下载了库 Cryptico,它为我提供了一个易于使用的 RSA 密钥生成/加密/解密。生成的 RSA 密钥的公共部分,只需使用以下命令即可轻松提取:

publicKeyString(RsaKey)

这是:

my.publicKeyString = function(rsakey) 
{
    pubkey = my.b16to64(rsakey.n.toString(16));
    return pubkey; 
}
Run Code Online (Sandbox Code Playgroud)

在函数中生成密钥时定义了 rsakey.n:

function RSAGenerate(B, E)
{
    var rng = new SeededRandom();
    var qs = B >> 1;
    this.e = parseInt(E, 16);
    var ee = new BigInteger(E, 16);
    for (;;)
    {
        for (;;)
        {
            this.p = new BigInteger(B - qs, 1, rng);
            if (this.p.subtract(BigInteger.ONE).gcd(ee).compareTo(BigInteger.ONE) == 0 && this.p.isProbablePrime(10)) break;
        }
        for (;;)
        {
            this.q = new BigInteger(qs, 1, rng);
            if …
Run Code Online (Sandbox Code Playgroud)

javascript rsa cryptico

1
推荐指数
1
解决办法
2224
查看次数

标签 统计

cryptico ×2

javascript ×1

openssl ×1

php ×1

rsa ×1

ssl ×1

ssl-certificate ×1