标签: sha256

PKCS#7 SignedData和多个摘要算法

我正在研究将SHA1中的应用程序升级为默认的PKCS#7 SignedData摘要算法,以更强的摘要(如SHA256),以保留不支持SHA1以外的摘要算法的签名验证程序的向后兼容性.我想检查一下我对PKCS#7格式和可用选项的理解.

我想要做的是使用SHA1和SHA256(或更一般地说,一组摘要算法)消化消息内容,以便较旧的应用程序可以继续通过SHA1进行验证,并且升级的应用程序可以通过SHA256开始验证(更一般地说,提供最强的摘要),忽略较弱的算法.[如果有更好的方法,请告诉我.]

看来,在PKCS#7标准中,提供多个摘要的唯一方法是提供多个SignerInfos,每个摘要算法一个.不幸的是,这似乎会导致安全性的净减少,因为攻击者能够使用最弱的摘要算法剥离除SignerInfo之外的所有算法,而单独的摘要算法仍将形成有效的签名.这种理解是否正确?

如果是这样,我的想法是在SignerInfo的authenticatedAttributes字段中使用自定义属性为其他摘要算法提供额外的消息摘要(将SHA1保留为"默认"算法以实现向后兼容).由于此字段被认证为单个块,因此可以防止上述攻击.这似乎是一种可行的方法吗?有没有办法在不超出PKCS标准的情况下完成这个或类似的东西?

cryptography sha1 sha256 digital-signature pkcs#7

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

signtool双重签名失败

有关尝试使用SHA1/SHA256进行双重签名时遇到的故障的问题.

我现在已经过了几年SHA256代码签名证书,但在新的一年(2016)之前,我开始使用/ FD SHA256的哈希算法是符合SHA1微软弃用.

这工作正常,但当然签名哈希不会在旧操作系统上验证.我不关心XP,但我仍然关心Vista.

我首先使用以下代码签署SHA1:

signtool sign /fd SHA1 /f "cert.pfx" /p "password" /t http://timestamp.verisign.com/scripts/timsetamp.dll "file"
Run Code Online (Sandbox Code Playgroud)

然后我尝试我的双重签名:

signtool sign /as /fd SHA256 /f "cert.pfx" /p "password" /tr http://timestamp.globalsign.com/?signature=sha2 "file"
Run Code Online (Sandbox Code Playgroud)

而signtool给了我这个:


Done Adding Additional Store
SignTool Error: An unexpected internal error has occurred.
Error information: "Error: SignerSign() failed." (-2147024846/0x80070032)

现在我可以使用单个算法(SHA1或SHA256)成功签名文件,但我无法添加第二个签名.我唯一的猜测是,因为我使用的是两种算法的SAME证书,所以不喜欢这样.我是否需要为每种算法使用不同的物理证书?

只是想知道,因为在新的一年之前,我使用SHA1算法多年来一直使用SHA256证书,并且它在所有操作系统上都经过验证.

sha1 sha256 signtool

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

基于Excel公式的函数用于SHA256 / SHA512哈希运算,无需VBA或宏

到了2017年,如果安全性很重要,那么任何需要使用哈希的人都应该避免使用诸如MD5之类的“破碎”哈希。是否有人找到或创建了一种无需使用VBA或宏即可在Excel中执行更安全的SHA256或SHA512哈希的方法?

过去35,000年前使用MD5就是一个很好的例子(如本SO:不使用VBA的excel中的MD5哈希函数所示)。

避免使用VBA /宏的原因:与移动设备的兼容性,例如iOS的Excel。

旁注:原始的Stack Overflow帖子具有成功的答案,但链接无效,这是供参考的新链接:https : //tzamtzis.gr/2017/web-analytics/excel-function-md5-hashing-without-vba /

excel hash sha256 excel-formula sha512

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

PHP和Paw REST Client之间的哈希值不相似

我正在构建一个HMAC API,我在使用Paw测试散列时遇到了问题.

在Paw我有这个有效载荷:

GET:/hello/world:"":9a6e30f2016370b6f2dcfb6880501d7f2305d69bout
Run Code Online (Sandbox Code Playgroud)

和定制HMAC-SHA256变量(实际上起到这样,设置它在X-哈希报头.

X-Hash: 4Cq2yehWumDcUk1dYyfhm6qWjJVBkOCB8o12f5l0WGE=
Run Code Online (Sandbox Code Playgroud)

在我的PHP API中,我有同样的事情:

GET:/hello/world:"":9a6e30f2016370b6f2dcfb6880501d7f2305d69bout
Run Code Online (Sandbox Code Playgroud)

和使用:

hash_hmac('sha256', $this->getPayload(), '9a6e30f2016370b6f2dcfb6880501d7f2305d69bout', false);
Run Code Online (Sandbox Code Playgroud)

所以在比较哈希时:

Paw: 4Cq2yehWumDcUk1dYyfhm6qWjJVBkOCB8o12f5l0WGE=
PHP: 6961b9d1f6e986c49d963cbebd691fa68dfa59b4ce3b7f05320c2d43eae3c7c3
Run Code Online (Sandbox Code Playgroud)

他们是非常不同的.知道为什么会这样吗?

更新

爪子代码:

function evaluate(context){
  var loc = getLocation(context.getCurrentRequest().url);

  var payload = "";
  payload += context.getCurrentRequest().method + ':';
  payload += loc.pathname + ':';
  payload += JSON.stringify(context.getCurrentRequest().body) + ':';
    payload += "9a6e30f2016370b6f2dcfb6880501d7f2305d69bout"; // Private key
  return payload;
};

function getLocation(href) {
    var match = href.match(/^(https?\:)\/\/(([^:\/?#]*)(?:\:([0-9]+))?)(\/[^?#]*)(\?[^#]*|)(#.*|)$/);
    return match && {
        protocol: match[1],
        host: match[2],
        hostname: match[3],
        port: match[4],
        pathname: match[5], …
Run Code Online (Sandbox Code Playgroud)

php sha256 hmac paw-app

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

将对象内容作为对象 ID 进行哈希处理:SHA256 的快速替代方案

我正在设计Content-addressable storage,所以我正在寻找一个哈希函数来生成对象标识符。每个对象都应该以这种方式根据其内容获得短 ID:object_id = hash(object_content).

先决条件:

  1. 哈希函数应该很快。
  2. 碰撞概率必须尽可能低。
  3. 最佳 ID 长度是32字节,以便256^32最大程度地寻址对象(但可以放宽此要求)。

考虑到这些要求,我选择了SHA256哈希,但不幸的是,它对于我的目的来说还不够快。最快的实现SHA256,我能到基准是opensslboringssl:我的桌面上,Intel Core I5 6400它大约给了420 MB/s每个核心。其他实现(如crypto/rsaGo)甚至更慢。我想SHA256用其他散列函数替换,它提供与 相同的碰撞保证SHA256,但提供更好的吞吐量(至少600 MB/s每个内核)。

请分享您对解决此问题的可能选项的看法。

另外我想指出的是,硬件更新(例如购买带有AVX512指令集的现代 CPU )是不可能的。重点是找到可以在商品硬件上提供更好性能的哈希函数。

hash identity blob sha256

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

如何使用powershell将sha256哈希输出作为二进制数据而不是十六进制数据?

是否有内置方法可以将 SHA256 生成为给定字符串的二进制数据?基本上,我使用下面的 bash 脚本首先将哈希生成为二进制数据,然后进行 base64 编码。我想要的只是 Powershell 中的确切内容,以便两个输出都相同:

clearString="test"
payloadDigest=`echo -n "$clearString" | openssl dgst -binary -sha256 | openssl base64 `
echo ${payloadDigest}
Run Code Online (Sandbox Code Playgroud)

在 powershell 中,我可以使用以下脚本以十六进制形式获取 SHA256,但随后很难将其作为二进制数据获取:

$ClearString= "test"
$hasher = [System.Security.Cryptography.HashAlgorithm]::Create('sha256')
$hash = $hasher.ComputeHash([System.Text.Encoding]::UTF8.GetBytes($ClearString))

$hashString = [System.BitConverter]::ToString($hash)
$256String= $hashString.Replace('-', '').ToLower()
$sha256String="(stdin)= "+$256String
$sha256String

Run Code Online (Sandbox Code Playgroud)

然后,我可以使用 [Convert]::ToBase64String($Bytes) 转换为 base64,但在将其传递给 base64 转换之前,如何获得类似于 bash 输出的二进制数据。

bash powershell base64 sha256 payload

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

Node & python 不返回相同的 hash256

我的 NodeJS 和 Python 脚本没有返回相同的哈希值,是什么导致了这个问题?

节点.js

const { createHmac } = require("crypto");
var message = 'v1:1583197109:'
var key = 'Asjei8578FHasdjF85Hfjkasi875AsjdiAas_CwueKL='
const digest = Buffer.from(key, "base64");
const hash = createHmac("sha256", digest)
  .update(message)
  .digest("hex");

console.log(hash)
> 7655b4f816dc7725fb4507a20f2b97823979ea00b121c84b76924fea167dcaf7
Run Code Online (Sandbox Code Playgroud)

蟒蛇3

message = 'v1:1583197109:'
key = 'Asjei8578FHasdjF85Hfjkasi875AsjdiAas_CwueKL=' + '=' #add a "=" to avoid incorrect padding
digest = base64.b64decode(key.encode('utf-8'))
hash_ = hmac.new(digest, message.encode('utf-8'), hashlib.sha256)
hash_result = hash_.hexdigest()
print(hash_result)
> c762b612d7c56d3f9c95052181969b42c604c2d41b7ce5fc7f5a06457e312d5b
Run Code Online (Sandbox Code Playgroud)

我想这可能是额外的=以避免不正确的填充,但我的密钥以单个=结尾。

python sha256 hmac node.js

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

在 Python 中为 Netsuite API 生成 SHA256 oauth_signature

oauth_signature我正在尝试为 API 调用生成一个。使用Postman,我生成了如下代码

import requests
import json

url = "https://xxxxxxxxxxxx"

payload = json.dumps({
"key1": "value",
"Key2": "value2"
})

headers = {
  'Authorization': 'OAuth realm="xxxxxxxx",
   oauth_consumer_key="xxxxxxxxxxxxxxx",
   oauth_token="xxxxxxxxxxxx",
   oauth_signature_method="HMAC-SHA256",
   oauth_timestamp="1628552790",
   oauth_nonce="xxxxxxxx",
   oauth_version="1.0",
   oauth_signature="xxxxxxxxxxxxxxx"',
  'Content-Type': 'application/json',
  'Cookie': 'NS_ROUTING_VERSION=LAGGING'
}

response = requests.request("POST", url, headers=headers, data=payload)

print(response.text)
Run Code Online (Sandbox Code Playgroud)

我想使用 Python 来生成oauth_signaturePostman 自动生成的文件,而无需太多关于如何生成的文档。

python netsuite sha256 oauth-1.0a

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

是否可以通过小块来计算哈希值?

我目前正在研究低内存嵌入式系统的固件更新机制。

系统的一部分需要在发送文件之前对二进制文件进行哈希处理(使用 SHA-256)(添加了其他安全功能,但不会影响此问题)。设备必须在验证该哈希值之前对其进行验证,但内存非常低。它将接收小块的数据,我想知道是否可以“即时”计算部分哈希,以避免在完全传输后再次加载整个二进制文件。

举个例子,假设要散列的数据是“part1part2part3”。完整数据的哈希为“hash”,“part1”的哈希为“hash1”,“part2”的哈希为“hash2”,“part3”的哈希为“hash3”。

我可以执行任何数学运算将部分哈希值转换为完整哈希值吗?就像是

hashReceived = hash
tempHash = operation(hash1,hash2)
tempHash = operation(tempHash, hash3)
if(hashReceived == tempHash)
... continue
else
... fail
Run Code Online (Sandbox Code Playgroud)

我正在寻找 SHA-256 的数学属性(类似于分配属性),它可以允许这种行为而不破坏任何 SHA-256 属性。

security algorithm hash sha256

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

将 SHA256 摘要添加到 RPM 包

我想将标头和负载的 SHA256 摘要添加到我的 RPM 包中。

目前,它正在使用 sha1 摘要进行构建。

下面是输出 rpm --checksig --verbose pkg_name.rpm

    Header SHA1 digest: OK
    MD5 digest: OK
Run Code Online (Sandbox Code Playgroud)

环境-RHEL6

这是我到目前为止所尝试的

%_source_filedigest_algorithm 8
%_binary_filedigest_algorithm 8
Run Code Online (Sandbox Code Playgroud)
  • 在pkg.spec文件中添加上述宏,如下所示,该文件将传递给rpmbuild命令
%define _source_filedigest_algorithm 8
%define _binary_filedigest_algorithm 8
Run Code Online (Sandbox Code Playgroud)

但上述解决方案都不适合我,重建后我仍然看到我的包正在使用 sha1 和 md5 作为摘要算法进行构建。

请注意上述每个解决方案的命令输出rpm --showrc | grep "digest_algo"如下

-13: _binary_filedigest_algorithm       8
-13: _source_filedigest_algorithm       8

Run Code Online (Sandbox Code Playgroud)

linux hash sha256 rpmbuild rpm-spec

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