我意识到这个问题可能有点模糊,或者我可能使用了不正确的术语,那是因为我试图掌握这些东西:).
我需要使用dsig:Signature部分实现XML消息的数字签名.我想我理解这个过程; 我将使用私钥对其进行签名,这将保证收件人发送邮件的是我,并且没有人篡改过它.
我是对的,这与实施TLS客户端证书不同,但目标是一样的吗?(因为TLS是传输级别,对吧?)实现客户端证书会更容易吗?这个比那个好吗?
非常感谢你的回复,
马亭
更新1:
我认为另一个区别是使用TLS客户端证书将整个邮件加密,而使用数字签名时,邮件本身将是纯文本,包含签名部分.
我的目标是轻量级的消息签名,与PGP相当,除了只需要一个私钥,没有公钥密钥.目标仅仅是防止在两个可信实体之间篡改字符串.它从受信任的来源开始,通过互联网,然后到达另一个受信任的目的地.
我想知道我的天真方法是否安全.因为签名算法实际上不是强制性的.
1)源和目的地都有一个"私钥",它只是由uuidgen生成的一个非常随机的数字.
2)Source有一个它打算发送到目的地的字符串.
3)Source将有效负载字符串与私钥连接起来,然后sha1是结果,以产生签名.
4)生成的纯文本值+签名成对发送到目的地."你好// SIG:12345ABCDEFG"
5)Desination接收签名变量,用其已知的私钥生成签名,并再次比较与接收的数据配对的签名.如果匹配,则接受.
此变体将包含舍入到小时的unix时间戳,使签名到期.
我担心的是,如果选择一组数据有效载荷并使用这种方法分析得到的签名,那么强制私钥是可行的.
谢谢
我需要验证包含多个值的消息的签名.我唯一的参数是签名,公钥和值本身.用于创建签名的算法是具有192位的椭圆曲线密码术.我已经尝试在网上找到代码示例,但我没有找到任何针对此案例的内容.
有没有人使用java验证这个算法?您能否提供代码或示例链接?
谢谢您的帮助!
我正在开发一个PDF签名工具.为此,我将获得PKCS#1格式的PDF签名sha256数据和设备的证书,我需要使用这两个数据嵌入PDF中.大多数PDF阅读器仅支持PKCS#7签名.
有没有办法将PKCS#1签名转换为PKCS#7签名(使用证书文件)?
我知道PKCS#7 =证书+可选原始数据+ PKCS#1格式的签名
如何PKCS11
在 Python 中签署文件?
我正在寻找一种.txt
使用“加密令牌接口”对文件进行签名的方法,但我还没有找到解决方案。
我的第一个想法是使用pycrypto
,但文档没有提到这一点。
我想ERP
通过存储在服务器上的Web浏览器文档在我们的数字签名上实现一个过程.这个过程应该是:
数字标牌可以使用智能卡或服务器端标志系统完成.知道如何实施它吗?
我创建了一个Web服务API,它的体系结构使得服务器需要客户端对请求进行签名以及分配给它的密钥(签名在多个请求之间总是不同).
服务器将客户端的签名与其自己的计算签名进行匹配.如果它们匹配,则服务器返回响应.
我想知道客户端是否应检查从服务器返回的响应,以查看它是否来自发出请求的同一应用程序.
HTTP请求和HTTP响应之间是否存在任何类型的攻击?
无论ed25519的Java和JS-氯化钠有ed25519加密签名方法的实现。但是,我从ed25519-java获得了公共密钥和签名消息(使用公共密钥的对应私钥进行签名),并尝试使用js-nacl中的公共密钥来验证签名消息。这给出了一个null
值,即无法使用公共密钥打开已签名的消息。
我的问题是,是否应该可以登录Java并验证Javascript中的签名?如果可以,为什么?
Java代码:
public static void main(String[] args) {
byte[] privateKey = new byte[32];
Arrays.fill(privateKey, (byte) 0);
byte[] publicKey = ed25519.publickey(privateKey);
byte[] signature = ed25519.signature("www.example.com".getBytes(), privateKey, publicKey);
System.out.println("Signature: " + Base64.encodeBase64URLSafeString(signature) + "\nPublicKey: " + Base64.encodeBase64URLSafeString(publicKey));
try{
System.out.println("Verification: " + ed25519.checkvalid(signature, "www.example.com".getBytes(), publicKey));
} catch (Exception e){
System.out.println(e.getStackTrace());
}
}
Run Code Online (Sandbox Code Playgroud)
checkvalid调用返回true。
输出签名: oFMU_mC_zzZcJP2C-uTqsyUHoyLUSnwirJbhcdkSTnj2nI_p-VgKAqN5bFMPKsKYiWvyiUgHWu3s4OyB9WbKDg
输出公钥: O2onvM62pC1io6jQKm8Nc2UyFXcd4kOmOsBIoYtZ2ik
javascript代码:
var signature = "oFMU_mC_zzZcJP2C-uTqsyUHoyLUSnwirJbhcdkSTnj2nI_p-VgKAqN5bFMPKsKYiWvyiUgHWu3s4OyB9WbKDg";
var pk = "O2onvM62pC1io6jQKm8Nc2UyFXcd4kOmOsBIoYtZ2ik";
var nacl_factory = require('js-nacl');
var nacl = nacl_factory.instantiate();
var b64 …
Run Code Online (Sandbox Code Playgroud) 我使用node.js 玩数字签名.出于测试目的,我创建了一些XML数据的数字签名,首先只使用SHA256,然后使用RSA-SHA256.
令我困惑的是,两种签名方法都创建了完全相同的签名.两个签名都是相同的.如果它们相同,那么为什么有两种不同的方法(SHA256与RSA-SHA256)?
我包括以下代码:
var crypto = require('crypto'),
path = require('path'),
fs = require('fs'),
pkey_path = path.normalize('private_key.pem'),
pkey = '';
function testSignature(pkey) {
var sign1 = crypto.createSign('RSA-SHA256'),
sign2 = crypto.createSign('SHA256');
fs.ReadStream('some_document.xml')
.on('data', function (d) {
sign1.update(d);
sign2.update(d);
})
.on('end', function () {
var s1 = sign1.sign(pkey, "base64"),
s2 = sign2.sign(pkey, "base64");
console.log(s1);
console.log(s2);
});
}
// You need to read private key into a string and pass it to crypto module.
// If the key is …
Run Code Online (Sandbox Code Playgroud) 对于如何计算XAdES签名中SignedProperties元素的摘要,我已经进行了几天的努力。我有一个参考XML文件,其中计算了两个摘要值(正在签名的文件和已签名的属性),我知道它很好,因为它通过了验证程序。我为要签名的文件计算了正确的摘要值,但是无论将什么作为摘要方法的输入(我使用OpenSSL),我都无法获得与参考文件相同的值。当然,我自己的文件此后不会通过验证程序。我使用以下命令来计算摘要:
openssl dgst -sha256 -binary myfile.xml | openssl base64
Run Code Online (Sandbox Code Playgroud)
我通过提取参考文件的SignedProperties元素记录了文件myfile.xml并按原样保存。
<xades:SignedProperties Id="xmldsig-f6a6a2a1-87af-4720-8eed-cf4532e99106-signedprops"><xades:SignedSignatureProperties><xades:SigningTime>2015-09-22T09:02:48.624+02:00</xades:SigningTime><xades:SigningCertificate><xades:Cert><xades:CertDigest><ds:DigestMethod Algorithm="http://www.w3.org/2001/04/xmlenc#sha256"/><ds:DigestValue>cAJECbIzXZiLH+ILWPrM5jfA13GKcEC8t1qe7/BxqBM=</ds:DigestValue></xades:CertDigest><xades:IssuerSerial><ds:X509IssuerName>CN=thawte SHA256 Code Signing CA,O=thawte\, Inc.,C=US</ds:X509IssuerName><ds:X509SerialNumber>13010307134774063901853305426952669967</ds:X509SerialNumber></xades:IssuerSerial></xades:Cert></xades:SigningCertificate></xades:SignedSignatureProperties><xades:SignedDataObjectProperties><xades:DataObjectFormat ObjectReference="#xmldsig-f6a6a2a1-87af-4720-8eed-cf4532e99106-ref0"><xades:Description>signature détachée du fichier indexfile.txt</xades:Description><xades:MimeType>text/plain</xades:MimeType></xades:DataObjectFormat></xades:SignedDataObjectProperties></xades:SignedProperties></xades:SignedProperties>
Run Code Online (Sandbox Code Playgroud)
显然,我应该得到的价值:
6JK3GHDL25+EIRefNMQJ3SOGSI8uzQ45PiziMomZkYs=
Run Code Online (Sandbox Code Playgroud)
但是我不明白。我不知道是否必须进行一些转换或规范化,关于这部分的说明非常模糊。它以UTF-8编码,没有换行符。
有人怎么做吗?有什么把戏吗?