Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.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
Php 电子签名要求_Php_Mysql_Electronic Signature - Fatal编程技术网

Php 电子签名要求

Php 电子签名要求,php,mysql,electronic-signature,Php,Mysql,Electronic Signature,大家好,我的社区 我在电子签名方面有困难,尤其是在技术要求方面如何适用新加坡法律 根据法律,新加坡接受电子签名,前提是签名: 对使用它的人来说是独一无二的 能够识别该人 以一种方式或使用一种由承包商单独控制的方式创建的 使用它的人;及 与与其相关的电子记录相链接,如果记录发生更改,电子签名将无效 我们可以通过HTML5画布制作电子签名,然后将其保存为Database64字符串。这意味着第1点,第2点。三,。你没事 问题出现在第4点。我们确实可以将签名和数据合并到加密字符串中,但是,由于我们拥

大家好,我的社区

我在电子签名方面有困难,尤其是在技术要求方面如何适用新加坡法律

根据法律,新加坡接受电子签名,前提是签名:

  • 对使用它的人来说是独一无二的
  • 能够识别该人
  • 以一种方式或使用一种由承包商单独控制的方式创建的
    使用它的人;及
  • 与与其相关的电子记录相链接,如果记录发生更改,电子签名将无效
我们可以通过HTML5画布制作电子签名,然后将其保存为Database64字符串。这意味着第1点,第2点。三,。你没事

问题出现在第4点。我们确实可以将签名和数据合并到加密字符串中,但是,由于我们拥有签名和数据,我们可以编辑数据并创建新字符串:

|id|name|price|signature|final_hash|
------------------------------------
|12|test|40000|data:base|3edcde4642|
因此,我们想到了另一种方法,即将一些我们不知道的参数混合到最终的_散列中,例如签名人的IP地址、他/她的用户代理。。。但是,由于我们不保存这些值,这意味着我们以后将无法检查是否修改了某些值

这就是我们被困的地方,你知道怎么做吗?对我来说,既能检查是否没有修改数据,又不能在以后修改数据,这似乎是不可能的,但我当然可能错了

非常感谢你的帮助

注意:我使用术语“文档”来指代您想要签署的任何内容


一些误解
  • 首先,使用HTML5画布或类似方法得到的不是签名,而是指纹。我的意思是,它标识客户,但不能签署文档(至少不能单独签署)。两个警告:

  • 指纹是浏览器的指纹,而不是用户的指纹
  • 会有碰撞。事实上,为了隐私起见,有人推动让指纹浏览器更难操作,主要是因为公司可以在没有cookie的情况下使用指纹跟踪你
  • 您不应通过将指纹连接到数据进行签名。这不是一个签名,这是一个,也不是最好的方法来盐

顺便说一下,这是一个创建浏览器指纹的好工具


你的要求
  • 对使用它的人来说是独一无二的
  • 能够识别该人 这些要求意味着“识别”。这意味着你需要此人的身份证

  • 以完全由承包商控制的方式或方式创建 使用它的人;及
  • 该要求拼写为“身份验证”。这意味着你需要确认人们是他们声称的那个人。你可能已经看到了这个理论,你这样做的方式是:a)某人是(即生物特征)b)某人知道的东西(即密码)或c)某人拥有的东西(即访问电子邮件帐户、手机等)

    您似乎在使用浏览器指纹来进行身份验证和身份验证,这让我很烦恼。这可能使伪造请求看起来像是另一个用户变得太容易了

    通常,在这种情况下,您将使用用户名和密码执行传统的身份验证过程,然后发布cookie。你为什么要避免

  • 与与其相关的电子记录相链接,如果记录发生更改,电子签名将无效
  • 这个要求拼写为“签名”。这可能意味着电子记录将是公开的,我们希望有防伪保护

    既能检查是否没有修改数据,又不能在以后修改数据,这似乎是不可能的

    一般的想法是在修改文件时使签名失效。如果要使修改正式生效,则需要创建新签名

    为了防止第三方从修改后的邮件中创建签名,您需要添加一些密钥。现在,这提出了两个问题:

  • 第三方是否应该能够验证签名?如果需要,您需要一个非对称算法

  • 是否应对文档进行保护以防您(或对服务器有严格访问权限的人)访问?如果他们应该受到保护,这表明你需要为每个用户保密。最简单的解决方案是拥有密码


  • 不对称溶液 为了在PHP中实现非对称解决方案,我建议使用

    遵循他们的:

    代码将使用从服务器收集的熵来生成密钥对

    然后你可以用它来做简单的事情

    如果需要验证客户端上的签名,可以使用

    对于您的用例,服务器只需要一个密钥对。这里的概念是服务器对文档进行签名。如果签名匹配,则表示指纹正确

    无论哪种方式,您都应该对私钥保密(永远不要将其发送给客户端),并且您可以与需要验证签名的任何人共享公钥

    使用此功能,服务器可以对标识用户/客户端的文档(例如,包括指纹)进行签名,并发布文档和签名。文档完全可读(未加密),但如果有人修改,签名将不再有效

    要验证签名,他们需要公钥。但是,公钥对于创建假签名没有用处,要做到这一点,他们需要获得私钥


    对称解 对称算法的主要优势在于性能。对称算法的缺点是需要密钥来验证它

    因此,如果您需要第三方能够验证签名(或
    include('Crypt/RSA.php');
    $rsa = new Crypt_RSA();
    $pair = $rsa->createKey();
    $privatekey = $pair['privatekey'];
    $publickey = $pair['publickey'];
    
    include('Crypt/RSA.php');
    $rsa = new Crypt_RSA();
    $rsa->loadKey('...'); // private key
    $plaintext = '...';
    $signature = $rsa->sign($plaintext);
    
    $rsa->loadKey('...'); // public key
    echo $rsa->verify($plaintext, $signature) ? 'verified' : 'unverified';