标签: digital-signature

加密时间

是否存在加密机制,通过该机制可以使用日期对文档进行签名,以便以后不可能伪造相同的签名?也许某种服务器发布每日加密密钥(但你怎么能信任它们?;-).

对于不可避免的刺激实用主义者,我不是想完成一些任务.我只是好奇解决方案空间是什么样的.

time cryptography digital-signature trusted-timestamp

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

PADES-LTV文档时间戳验证错误

我正在签署带有文档时间戳签名的PADES-LTV签名格式的pdf文档.

通常,签名文件都可以.签名和文档时间戳签名都经过验证,一切正常.但是,有时会出现以下结果:

当我尝试使用Adobe Reader 10.1.0.534打开签名文档时,将验证签名,但无法验证文档时间戳签名.它说:至少有一个签​​名需要在顶栏上进行验证.当我查看左侧的"签名"部分时,它说:签名者的身份无效,因为它已过期或尚未生效.如果我尝试打开文档时间戳的签名详细信息,Adobe Reader会崩溃.(我提交了一个关于此问题的错误报告,但我还没有收到任何回复)

当我使用Adobe Acrobat X pro打开签名文档并查看文档时间戳签名的详细信息时,此值" 1970/01/01 03:00:00 + 03'00' "将显示在签名日期字段中.实际上,日期字段应该不可用,因为ETSI 102 778-4 V1.1.2说:在文档时间戳字典中,名称,M,位置,原因和联系信息不应存在.

为什么adobe reader会显示这个值1970/01/01 03:00:00 + 03'00'而不是不可用

有什么不对?

谢谢

pdf timestamp digital-signature adobe-reader pades

6
推荐指数
0
解决办法
803
查看次数

错误?在codesign中 - 删除签名功能

我想从已使用codesign签名的Mac应用中删除数字签名.有一个未记录的选项来编码, - 删除签名,它的名字似乎就是我所需要的.但是,我无法让它发挥作用.我意识到它没有记录,但我真的可以使用这个功能.也许我做错了什么?

 codesign -s MyIdentity foo.app
Run Code Online (Sandbox Code Playgroud)

正常工作,签署应用程序

 codesign --remove-signature foo.app
Run Code Online (Sandbox Code Playgroud)

然后说磁盘活动几秒钟

 foo.app: invalid format for signature
Run Code Online (Sandbox Code Playgroud)

和foo.app已经增长到1.9 GB!(具体来说,它是foo.app/Contents/Resources/MacOS中的可执行文件,从1.1 MB增加到1.9 GB.)

当我尝试签名/取消签名二进制支持工具而不是.app时,会发生同样的事情.

有任何想法吗?


背景:这是我自己的应用程序; 我不打算打败版权保护或类似的东西.

我想分发一个已签名的应用程序,以便每次更新应用程序都不需要用户批准来读取/写入应用程序在钥匙串中的条目.但是,有些人需要通过将自己的文件夹添加到/ Resources来修改应用程序.如果他们这样做,签名将变为无效,并且应用程序无法使用自己的Keychain条目.

该应用程序可以轻松检测是否发生了这种情况.如果应用程序可以删除它的签名,一切都会好的.那些进行此修改的人需要给修改后的,现在未签名的应用程序许可才能使用Keychain,但这对我来说没问题.

macos digital-signature

6
推荐指数
3
解决办法
1万
查看次数

用BC验证分离的签名

如何使用Java中的BouncyCastle提供程序验证分离的签名(CMS/pkcs#7签名)?

目前,我的代码会在邮件中引发异常 message-digest attribute value does not match calculated value

Security.addProvider(new BouncyCastleProvider());

File f = new File(filename);
byte[] buffer = new byte[(int)f.length()];
DataInputStream in = new DataInputStream(new FileInputStream(f));
in.readFully(buffer);
in.close();

CMSSignedData signature = new CMSSignedData(buffer);
SignerInformation signer = (SignerInformation) signature.getSignerInfos().getSigners().iterator().next();
CertStore cs = signature.getCertificatesAndCRLs("Collection", "BC");
Iterator iter = cs.getCertificates(signer.getSID()).iterator();
X509Certificate certificate = (X509Certificate) iter.next();

CMSProcessable sc = signature.getSignedContent();

signer.verify(certificate, "BC");
Run Code Online (Sandbox Code Playgroud)

java bouncycastle digital-signature

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

在 Python 中验证数字签名的 PDF

我目前正在使用 Python 处理一些 PDF 处理代码。对于这个项目,软件需要能够验证 PDF 是否具有有效的数字签名。到目前为止,在我的搜索中,我发现了一些可以解决问题的 Java API(例如 iText),但在 Python 中却没有。如果有人有以下任何一项的链接,将不胜感激:

  • 我可以用来验证数字签名的 API
  • 关于如何编写自己的代码来验证数字签名的说明/一般指南

其他细节:

  • PDF 的数字证书由 GlobalSign CA for Adob​​e 颁发(如果重要)
  • 此代码最终将在 Google App Engine 上运行

python pdf google-app-engine digital-signature

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

这个 API 签名请求方法安全吗?

我正在认证为我JSON-RPC API和我的当前工作的策略是使用通过发送请求签约POSTSSL

我想知道是否有人可以看到我没有使用以下签名方法考虑的任何漏洞。

客户端和服务器之间的所有通信都是通过POST发送的请求完成的SSLhttpAPI 服务器会直接拒绝不安全的请求。

依赖关系

var uuid = require('node-uuid');
var crypto = require('crypto');
var moment = require('moment');
var MyAPI = require('request-json').newClient('https://api.myappdomain.com');
Run Code Online (Sandbox Code Playgroud)

依赖链接:node-uuid , crypto , moment , request-json

瓦尔斯

var apiVersion = '1.0';
var publicKey = 'MY_PUBLIC_KEY_UUID';
var secretKey = 'MY_SECRET_KEY_UUID';
Run Code Online (Sandbox Code Playgroud)

请求对象

var request = {
    requestID : uuid.v4(),
    apiVersion : apiVersion,
    nonce : uuid.v4(),
    timestamp : moment.utc( new Date() ),
    params : params
}
Run Code Online (Sandbox Code Playgroud)

签名 …

api digital-signature hmac node.js

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

从 RSA 密钥对获取私钥/公钥 base64 表示

我想在 C# 中生成 RSA 密钥对。我能够获取密钥的 xml 字符串,但我需要它们的 base64 表示。这是我的 xml 代码

RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();

privateKeyXmlText = rsa.ToXmlString(true);
publicKeyXmlText = rsa.ToXmlString(false);
Run Code Online (Sandbox Code Playgroud)

但我想要的是

privateKeyStr=="MIICITAjBgoqhkiG9w0BDAEDMBUEEKaTCK5mE2MsQANxDAfaJe8CAQoEggH47qb6bFO+a2Fj...";
publicKeyStr == "MIIBKjCB4wYHKoZIzj0CATCB1wIBATAsBgcqhkjOPQEBAiEA/////wAA...";
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

c# rsa digital-signature

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

无法使用 Inno Setup 签署(卸载)安装程序

我安装了 Inno Setup 和 Inno Script Studio,以及 Visual Studio 2013。我有一个数字证书,用密码保护,名为certificate.p12. 我还安装了 Windows 8.1 驱动程序 SDK(虽然我运行的是 Windows 7 Professional x64)。我在安装程序中包含的编译输出已经签名。

我使用名为的签名工具my_signtool和以下命令配置了 Inno Script Studio :

"C:\Program Files (x86)\Windows Kits\8.1\bin\x64\signtool.exe" sign /f "z:\full\path\to\certificate.p12" /p "password" $f
Run Code Online (Sandbox Code Playgroud)

...在我的.iss文件中,我有:

SignTool=my_signtool
Run Code Online (Sandbox Code Playgroud)

在我的计算机上使用此设置,它可以完美运行。我编译项目,Inno Setup 会自动对安装程序及其卸载程序进行签名。

但是,我有一个同事应该是完全相同的设置。他拥有 Visual Studio 2013、Inno Setup 和 Inno Script Studio、证书副本及其密码。当他尝试编译它时, Inno Setup 失败,说试图针对uninst.e32.tmp返回运行 signtool 0x1。当他运行它尝试在命令提示符下手动运行的确切命令时,它失败了,指出uninst.e32.tmp不可用,但这似乎很正常,因为我怀疑 Inno Setup 只是在错误发生后自行清理(或者是吗?)。

我试过用$q符号工具的定义替换引号无济于事。事实上,除了通向signtool.exe自身的路径之外,所涉及的路径都没有任何空间。

我们的两个输出最初都是这样的。紧接着就是他们分歧的地方:我的继续运行,他抱怨签名工具失败了0x1

Starting compile.  [Monday, January 12 …
Run Code Online (Sandbox Code Playgroud)

inno-setup digital-signature visual-studio-2013

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

使用 Protobuf 序列化消息的一部分

我正在尝试使用 Protobuf 序列化/反序列化子消息。这样做的原因是签署。我希望能够签署我的部分信息。为了能够做到这一点,我需要以某种方式规范化它。

如果重要的话,我将 protbuf 3.0.0-alpha(使用 proto2 语言)与 Python3.4 一起使用。

示例文件:testp.proto

package my_package;

message my_mess {
  message data {
    optional uint64 x = 1;
    optional uint64 y = 2;
    optional uint64 z = 3;
  }
    optional bytes signature = 4;
}
Run Code Online (Sandbox Code Playgroud)

在这个例子中,我想对消息的数据部分进行签名。因此我只想序列化my_mess.data,签名,将签名放入my_mess.signature,然后序列化完整的消息my_mess。

编译 testp.proto:

$ protoc -I=. --python_out=. testp.proto 
[libprotobuf WARNING google/protobuf/compiler/parser.cc:471] No syntax specified for the proto file. Please use 'syntax = "proto2";' or 'syntax = "proto3";' to specify a syntax version. (Defaulted to proto2 syntax.)
Run Code Online (Sandbox Code Playgroud)

我注意到 mm.data 有方法 …

python serialization digital-signature protocol-buffers

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

即使更改了签名的最后一个字符,JWT 令牌解码

我只是在 Rails 应用程序上试用 JWT 令牌,使用这个 jwt 库:https : //github.com/jwt/ruby-jwt

JWT.encode({sss: "333"}, 'SECRET_KEY')
Run Code Online (Sandbox Code Playgroud)

返回以下令牌:

eyJhbGciOiJIUzI1NiJ9.eyJzc3MiOiIzMzMifQ.CwX_1FztYHVpyx_G27u938SceilsVc5AB5Akwqlo2HA

然后我使用上面的令牌解码

JWT.decode("eyJhbGciOiJIUzI1NiJ9.eyJzc3MiOiIzMzMifQ.CwX_1FztYHVpyx_G27u938SceilsVc5AB5Akwqlo2HA", 'SECRET_KEY')
Run Code Online (Sandbox Code Playgroud)

正确返回以下响应:

[{"sss"=>"333"}, {"alg"=>"HS256"}]

但是,如果我尝试将令牌的最后一个字母更改为B而不是当前的A,它仍然返回相同的响应,这很奇怪。

JWT.decode("eyJhbGciOiJIUzI1NiJ9.eyJzc3MiOiIzMzMifQ.CwX_1FztYHVpyx_G27u938SceilsVc5AB5Akwqlo2HB", 'SECRET_KEY')
Run Code Online (Sandbox Code Playgroud)

即使我提供的令牌是错误的,也会收到此响应:

[{"sss"=>"333"}, {"alg"=>"HS256"}]

实际上,我对所有字符都得到了相同的响应,直到 'D'

如果我使用F上面的和其他人,那么它会按预期显示错误:

JWT.decode("eyJhbGciOiJIUzI1NiJ9.eyJzc3MiOiIzMzMifQ.CwX_1FztYHVpyx_G27u938SceilsVc5AB5Akwqlo2HF", 'SECRET_KEY')
Run Code Online (Sandbox Code Playgroud)

JWT::VerificationError(引发签名验证)来自 (irb):34

这可能是什么原因?这是预期的行为还是我在这里做错了什么?

base64 ruby-on-rails digital-signature jwt

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