标签: digital-signature

如何创建用于签名的时间戳服务器

我想拥有自己的时间戳服务器,可以在二进制文件的签名过程中使用。

我找到了链接:http : //owcapage.wordpress.com/linux-time-stamp-server/

但是我无法开始工作。也许是因为我无法访问:www.opentsa.org

有没有其他选择?在 linux、windows 上,无所谓...

timestamp certificate digital-signature

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

DSS、VRI - 什么是我的结构?

我刚刚使用 itext 签署了文件。我也有LTV

在此处输入图片说明

我在 itext 文档中阅读-“DSS 包含对证书的引用,我们可以添加对 OCSP 响应和可用于重新验证证书的 CRL 的引用”

是的,我在 DSS 中找到了它们。

我还读到:“在 DSS 中,我们可以存储 VRI”

我不明白为什么要使用 VRI?因为在 DSS 中有相同的 OCSP 响应和证书。

还有 /61A2411B1..... 是什么意思?它是一些哈希还是随机数?

pdf digital-signature pdfbox

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

iText和数字签名

我尝试使用iText为JAVA和葡萄牙公民卡(智能卡)创建pdf签名.但是当代码执行MakeSignature类时,我总是收到一条错误说:

java.security.InvalidKeyException:提供的密钥(sun.security.pkcs11.P11Key $ P11PrivateKey)不是RSAPrivateKey实例

我需要一些帮助,有人可以帮助我吗?

 try {
        String pkcs11Config = "name=GemPC" + "\n" + "library=C:/WINDOWS/system32/pteidpkcs11.dll";
        ByteArrayInputStream configStream = new ByteArrayInputStream(pkcs11Config.getBytes());
        Provider pkcs11Provider = new sun.security.pkcs11.SunPKCS11(configStream);

        Security.addProvider(pkcs11Provider);
        CallbackHandler cmdLineHdlr = new DialogCallbackHandler();

        KeyStore.Builder builder = KeyStore.Builder.newInstance("PKCS11", pkcs11Provider,
                new KeyStore.CallbackHandlerProtection(cmdLineHdlr));

        KeyStore ks = builder.getKeyStore();

        PdfReader pdf = new PdfReader(filePath);
        FileOutputStream fos = new FileOutputStream(dest);
        PdfStamper stp = PdfStamper.createSignature(pdf, fos, '\0');
        PdfSignatureAppearance sap = stp.getSignatureAppearance();
        sap.setReason("I'm the author");

        String alias = (String) ks.aliases().nextElement();

        PrivateKey pk = (PrivateKey) ks.getKey("CITIZEN SIGNATURE CERTIFICATE", null);
        Certificate chain …
Run Code Online (Sandbox Code Playgroud)

java pdf pdf-generation itext digital-signature

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

OpenSSL ECDSA签名和验证文件

我想签名并验证带有椭圆曲线的pdf.我得到了一些代码,但它不起作用.

创建私钥:

openssl ecparam -genkey -name secp384r1 -noout -out private.pem
Run Code Online (Sandbox Code Playgroud)

创建公钥:

openssl ec -in private.pem -pubout -out public.pem
Run Code Online (Sandbox Code Playgroud)

签名文件:

openssl dgst -ecdsa-with-SHA1 test.pdf > hash openssl dgst
openssl dgst -ecdsa-with-SHA1 -inkey private.pem -keyform PEM -in hash > signature
Run Code Online (Sandbox Code Playgroud)

验证文件:

openssl dgst -ecdsa-with-SHA1 -verify public.pem -signature signature.bin data
Run Code Online (Sandbox Code Playgroud)

要签名和验证的部分不起作用.

openssl cryptography digital-signature ecdsa

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

类“org.bouncycastle.asn1.ASN1ObjectIdentifier”的签名者信息与同一包中其他类的签名者信息不匹配

有人可以帮我解决这个例外吗?这是否意味着我必须使用 1.5 的 Java 版本运行 keytool?

我以前有过它,但现在我明白了。

Exception in thread "main" java.lang.ExceptionInInitializerError
at com.itextpdf.text.pdf.security.CertificateInfo.getSubjectFields(CertificateInfo.java:356)
at com.itextpdf.text.pdf.PdfSignatureAppearance.getAppearance(PdfSignatureAppearance.java:884)
at com.itextpdf.text.pdf.PdfSignatureAppearance.preClose(PdfSignatureAppearance.java:1268)
at com.itextpdf.text.pdf.security.MakeSignature.signDetached(MakeSignature.java:140)
at org.deloitte.cms.efi.controller.signature.SignatureAppearance.sign4(SignatureAppearance.java:181)
at org.deloitte.cms.efi.controller.signature.SignatureAppearance.main(SignatureAppearance.java:208)
Run Code Online (Sandbox Code Playgroud)

引起:java.lang.SecurityException:类“org.bouncycastle.asn1.ASN1ObjectIdentifier”的签名者信息与同一包中其他类的签名者信息不匹配

这是我的代码:

    public void sign4(String src, String name, String dest,
        Certificate[] chain, PrivateKey pk,
        String digestAlgorithm, String provider, CryptoStandard subfilter,
        String reason, String location)
                throws GeneralSecurityException, IOException, DocumentException {
    // Creating the reader and the stamper
    PdfReader reader = new PdfReader(src);
    FileOutputStream os = new FileOutputStream(dest);
    PdfStamper stamper = PdfStamper.createSignature(reader, os, '\0');
    // Creating the appearance …
Run Code Online (Sandbox Code Playgroud)

java bouncycastle itext digital-signature maven

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

如何使用 ECDSA 以编程方式创建自签名数字证书

我正在尝试创建一个数字证书,该证书使用 EC 密钥而不是来自 RSA 的密钥进行自签名,并遵循这些 SO link1link2。我将link1中给出的RSA签名算法替换为EC

EC_KEY *ecc = NULL;
int eccgrp = OBJ_txt2nid("secp256k1");
ecc = EC_KEY_new_by_curve_name(eccgrp);
EC_KEY_set_asn1_flag(ecc, OPENSSL_EC_NAMED_CURVE);

if(!(EC_KEY_generate_key(ecc))) {
    BIO_printf(out, "Error in generating key");
    printf("Error 1\n");
}

if(!EVP_PKEY_assign_EC_KEY(pk, ecc)) {
    BIO_printf(out, "Error assigning EC_KEY to EVP_PKEY");
    printf("Error 2\n");
}
.
.
X509_set_pubkey(x,pk);
.
.
if (!X509_sign(x,pk,EVP_md5()))
    goto err;
.
.
Run Code Online (Sandbox Code Playgroud)

其余代码与链接 1 中给出的相同。没有打印错误,但是当我尝试打印 x509 证书时出现段错误X509_print_fp(stdout,x509);。这样做的正确方法是什么?

openssl pki digital-signature ecdsa

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

我应该使用 HMAC 摘要的 Base64 还是只使用 HMAC 十六进制摘要?

传奇

我公开了一个 API,它要求客户端通过发送两个标头来签署请求:

Authorization: MyCompany access_key:<signature>
Unix-TimeStamp: <unix utc timestamp in seconds>
Run Code Online (Sandbox Code Playgroud)

要创建签名部分,客户端应使用我的 API 服务发布的密钥。

在 Python (Py3k) 中,它看起来像:

import base64
import hmac
from hashlib import sha256
from datetime import datetime

UTF8 = 'utf-8'
AUTH_HEADER_PREFIX = 'MyCompany'

def create_signature(access_key, secret_key, message):
    new_hmac = hmac.new(bytes(secret_key, UTF8), digestmod=sha256)
    new_hmac.update(bytes(message, UTF8))
    signature_base64 = base64.b64encode(new_hmac.digest())
    return '{prefix} {access_key}:{signature}'.format(
        prefix=AUTH_HEADER_PREFIX,
        access_key=access_key,
        signature=str(signature_base64, UTF8).strip()
    )


if __name__ == '__main__':
    message = str(datetime.utcnow().timestamp())
    signature = create_signature('my access key', 'my secret key',  message)
    print(
        'Request headers are',
        'Authorization: …
Run Code Online (Sandbox Code Playgroud)

python encode digital-signature hmac python-3.x

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

为什么 JWT 签名对于特定负载不是唯一的

我的应用程序正在使用 JWT,应该可以防止重放攻击。我正在测试这个并遇到以下问题。

当我有一个有效的 JWT 并更改令牌/签名的最后一个字符时,JWT 仍然有效。例如,以下令牌都正确验证: eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJTb21lIFRlc3QiLCJjbGFpbSI6IlNvbWUgQ2xhaW0ifQ.UkFYSK7hSSeiqUOSMdbXgbOErMFnuK0Emk1722ny-r4 eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJTb21lIFRlc3QiLCJjbGFpbSI6IlNvbWUgQ2xhaW0ifQ.UkFYSK7hSSeiqUOSMdbXgbOErMFnuK0Emk1722ny-r5 eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJTb21lIFRlc3QiLCJjbGFpbSI6IlNvbWUgQ2xhaW0ifQ.UkFYSK7hSSeiqUOSMdbXgbOErMFnuK0Emk1722ny-r6 eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJTb21lIFRlc3QiLCJjbGFpbSI6IlNvbWUgQ2xhaW0ifQ.UkFYSK7hSSeiqUOSMdbXgbOErMFnuK0Emk1722ny-r7

我已经在http://jwt.io/上检查过这个,也可以在我的 .Net 应用程序中复制。

有人能解释一下签名对于给定的有效载荷是如何可能不是唯一的吗?我知道可能会发生碰撞,但我无法解释它们是连续的序列。

base64 digital-signature hmac jwt

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

C# 验证 PDF 签名

尝试验证 PDF 签名不起作用。PDF 由 Adob​​e Acrobat 签名,然后尝试使用客户端证书的公钥对其进行验证。

所以我得到了客户端证书的公钥,对 PDF 进行散列并验证散列是否等于 pdf 签名,但它失败了。

HttpClientCertificate cert = request.ClientCertificate;
X509Certificate2 cert2 = new X509Certificate2(cert.Certificate);

PdfReader pdfreader = new PdfReader("path_to_file");

AcroFields fields = pdfreader.AcroFields;
AcroFields.Item item = fields.GetFieldItem("Signature1");
List<string> names = fields.GetSignatureNames();

foreach (string name in names){
     PdfDictionary dict = fields.GetSignatureDictionary(name);
     PdfPKCS7 pkcs7 = fields.VerifySignature(name);
     Org.BouncyCastle.X509.X509Certificate pdfSign = pkcs7.SigningCertificate;

     // Get its associated CSP and public key
     RSACryptoServiceProvider csp = (RSACryptoServiceProvider)cert2.PublicKey.Key;

     // Hash the data
     SHA256 sha256 = new SHA256Managed();

     byte[] pdfBytes = System.IO.File.ReadAllBytes("path_to_pdf"); …
Run Code Online (Sandbox Code Playgroud)

c# pdf rsa itext digital-signature

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

如何使用RSA-SHA1算法签署xml元素?

我需要使用RSA-SHA1算法签署(并最终验证)XML文档的一个节点.w3.org链接

RSA-SHA1 URI:
http://www.w3.org/2000/09/xmldsig#rsa-sha1
指定于:
[XMLDSIG-CORE2002]的第6.4.2节

我正在关注这个例子,但无法想出如何将算法更改为所需.

签名生成发生在这里:

signedXml.ComputeSignature();
Run Code Online (Sandbox Code Playgroud)

带参数的唯一覆盖期望KeyedHashAlgorithm:

public void ComputeSignature(KeyedHashAlgorithm macAlg);(链接)

KeyedHashAlgorithm(链接)反过来只允许创建HMAC*和MAC*算法,并且没有RSA-SHA1.

在.Net中使用RSA-SHA1签署XML的最简单方法是什么?

编辑:

我正在尝试使用X509证书来提取密钥.证书的签名算法属性是sha1RSA.

这是我分配它的方式:

var signedXml = new SignedXml(xmlDoc);
...
signedXml.SigningKey = (RSACryptoServiceProvider)cert.PrivateKey;
...
signedXml.ComputeSignature();
Run Code Online (Sandbox Code Playgroud)

将得到的签名XML格式一致预期的一个,但digestsignature值无效.

.net c# xml cryptography digital-signature

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