小编Hut*_*ut8的帖子

数字签名与通过 DH 使用密钥的 HMAC

我正在编写一个大量使用密码学的应用程序。像大多数网络应用程序一样,我的将数据分解为不同类型的消息(即时消息、文件块、视频帧等)——并且必须检查每个消息的真实性,以防止篡改和正确的来源。到目前为止,我能够使用 ECDH 来协商我已经用于 AES 的共享秘密。当然,以后可以使用相同的共享秘密。

我的问题是:在这种情况下,使用 ECDSA 来签署每条消息是否有任何额外的好处,而不是简单地使用 ECDH 与 HMAC 建立的共享秘密?

下面,当我说 M 时,我的意思是加密消息或明文;应该没关系。请更正以下任何错误。

我知道在 ECDSA(或 DSA)中,通常M使用安全散列算法(我目前使用 SHA-2 之一)对消息 ( ) 进行散列处理H(M),然后H(M)使用签名者的私钥对其进行加密。这会产生RS整数(签名)。然后,M、R 和 S 被发送给已经拥有发送者公钥的接收者。 H'(M)计算,并使用R和验证签名S。BouncyCastle 提供了ECDSASigner实现这一点的方法。

在 HMAC 中,需要一个共享机密,我有。然后:(
HMAC(K, M) := H( f2(K) || H(f1(K) || M) ) 感谢您的更正,Pa?lo Ebermann。有关详细信息,请参阅他的回答。)

那么,考虑到 DH/ECDH 安全地协商共享秘密,我是否有理由不使用 HMAC?

相关:为什么NSA为 DSA 而不是 MAC 指定标准算法?仅仅因为它可以是 SHA-2 + AES?

速度在这里很重要,因为我希望我正在制定的这个协议不仅支持现在的文本消息,而且在不久的将来支持大文件和视频帧。因此,我更喜欢使用 HMAC,但要确保我可以达到上述目标。

谢谢你的帮助!

security cryptography digital-signature hmac dsa

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

在 Emacs 中以另一种主要模式缩进 SQL

我经常写一些脚本来做一些事情,通常涉及 SQL,在不同的主要模式下。也许它看起来像这样:

sql = """
SELECT * FROM table WHERE row_awesomeness > 1000
"""
Run Code Online (Sandbox Code Playgroud)

我希望能够适当地缩进 SQL,所以它看起来像:

sql = """
SELECT *
  FROM table
 WHERE row_awesomeness > 1000
"""
Run Code Online (Sandbox Code Playgroud)

我对所使用的 SQL 缩进算法并不挑剔,但我根本无法使用任何东西。我不是一个巨大的风扇sql-indent.el,但在新的缓冲区中使用它(功能我甚至不能得到这工作sql-indent-buffer没有任何东西从我的第一个描述改变,我肯定要的SELECTFROMWHERE条款是分开的上我认为非常标准的线条)。

理想情况下,我会突出显示包含 SQL 的区域并执行类似的操作M-x sql-indent-region RET- 不需要在换行符上缩进的内容。

sql emacs elisp indentation

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

带有未转义引号的Java CSV解析器

我有一个CSV文件有一些引用问题:

"Albanese Confectionery","157137","ALBANESE BULK ASST. MINI WILD FRUIT WORMS 2" 4/5LB",9,90,0,0,0,.53,"21",50137,"3441851137","5 lb",1,4,4,$6.7,$6.7,$26.8
Run Code Online (Sandbox Code Playgroud)

SuperCSV正在窒息这些水果虫(双关语).我知道2"应该是2"",但事实并非如此.LibreOffice实际上正确地解析了这个(让我感到惊讶).我正在考虑编写自己的小解析器,但其他行在字符串中有逗号:

"Albanese Confectionery","157230","ALBANESE BULK JET FIGHTERS,ASSORTED 4/5  B",9,90,0,0,0,.53,"21",50230,"3441851230","5 lb",1,4,4,$6.7,$6.7,$26.8
Run Code Online (Sandbox Code Playgroud)

有没有人知道Java库会处理这样的疯狂事情?或者我应该尝试所有可用的?或者我最好自己解决这个问题?

java csv supercsv

4
推荐指数
1
解决办法
3740
查看次数

X.509证书中"有效期"的目的是什么?

我已经阅读了我认为与此问题相关的RFC 2459(Internet X.509公钥基础结构证书和CRL配置文件)部分.但是,我并不完全清楚证书的有效期(特别是到期日期)的目的是什么.

我的理解是,证书的目的是以可以验证的方式将公钥绑定到身份(在X.509中,通过证书颁发机构,或在OpenPGP中,通过信任网).因此,在我看来,证书从创建时起有效,直到相应的私钥被泄露(或雇员被解雇,或其他),在这种情况下,它将被放在证书撤销列表中(我相信).

在什么情况下这不是真的?为什么身份与公钥的绑定突然变得无效?我知道大多数证书颁发机构都是商业企业,因此获得经常性费用是有利可图的,但我正在制作一个开源项目,只需生成证书(免费),将服务器上的用户名绑定到公钥,并且用户的密码用于向CA验证他的身份(当然,存储他的哈希密码).

security ssl x509certificate x509

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

Windows-1252 的 mb_detect_encoding 出现意外结果

我读过维基百科关于Windows-1252字符编码的文章。对于字节值<128的字符,它应该与ASCII/UTF-8相同。

这是有道理的:

php -r "var_export(mb_detect_encoding(\"\x92\", 'windows-1252', true));" 'Windows-1252'

正确检测到左弯撇号。

php -r "var_export(mb_detect_encoding(\"a\", 'windows-1252', true));" false

啊?字母“a”不是Windows-1252吗?

我运行此程序的终端设置为 UTF-8。因此,这应该与字母“a”的 ASCII 字节序列相同。为了最小化变量,如果我指定正确的 Windows-1252字节序列:

php -r "var_export(mb_detect_encoding(\"\x61\", 'windows-1252', true));" false

在这些情况下,更改“strict”参数(其文档非常无用)没有任何作用。

php utf-8 character-encoding mb-convert-encoding

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

为什么与 RIP 相关的 LEA 指令会产生与 PIC 不兼容的 R_X86_64_32S 重定位?

我正在exercism.org 上浏览 x86-64 教程。我在 Linux 上使用 NASM,生成 ELF 二进制文件。只有一点 C 代码可以在测试工具中调用我的汇编代码。他们的构建系统-pie在 LDFLAGS 和-fPIECFLAGS 中指定(除其他外,但我认为这些是最相关的)。因此,我需要(并且想了解)一个使用 PIC 的解决方案,它需要 RIP 相对寻址。

我有一个rdi名为 的 8 字节 (qword) 值数组的索引 (in ) values。我只想获取偏移量处的地址,以便将mov其指向的值存入寄存器。或者我会接受mov直接接受该值。

我试过这个:

lea rbx, [rel values + rdi * 8]
Run Code Online (Sandbox Code Playgroud)

我的理解是,这将查看该部分中rip的地址(相对于 ),然后它将添加正确的偏移量()并将其放入 中。valuesdatardi * 8rbx

但这会产生下一个错误:

/usr/bin/ld: space_age.o: relocation R_X86_64_32S against `.data' can not be used when making a PIE object; recompile with -fPIE
Run Code Online (Sandbox Code Playgroud)

我理解这 …

assembly x86-64 nasm relocation addressing-mode

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

习惯性地在Go中干掉常见字段

我正在为API编写客户端.一种方法,posts返回用户帖子的数组.

  • 每个帖子是八种不同类型之一.显然,这是一种"是一种"的关系.
  • 帖子的许多字段,包括(其中包括)ID,URL和时间戳,对于每种类型的帖子都是通用的.
  • 每种类型的帖子都有其类型唯一的字段.例如,照片帖子将具有分辨率和标题.

在具有继承的语言中,我将创建一个抽象基类Post,然后将其子类化为每种类型的帖子创建一个具体类.我会在基础构造函数或工厂方法Post,也许fromJson(),这需要一个JSON对象,并提取所有公共字段.然后我会在每个子类中覆盖它以提取专用字段,确保调用基本实现来干掉公共字段的提取.

Go没有继承,但它有组合.我定义了一个包含Post所有公共字段的结构,然后我为每个具有匿名Post字段的类型创建了一个结构,以便它包含所有Post字段.例如,

type PhotoPost struct {
    Post // which contains: ID int; URL string; etc
    Caption string
    Height int
    Width int
    /// etc
}
Run Code Online (Sandbox Code Playgroud)

我的目标之一是我想让我的客户的用户轻松访问Post的公共字段.所以我绝对不希望只有Posts()我正在写的方法返回interface{},因为那时任何时候有人想要获取所有帖子的ID,例如,他们将不得不做一个可怕的类型切换,这将是一个使用的模式一遍又一遍让我畏缩:

func GetIDs(posts []interface{}) []int {
    var ids []int
    for _, p := range posts {
        switch p.(type) {
            case PhotoPost:
                ids = append(ids, p.(PhotoPost).ID)
            //... repeat for the 7 other kinds of posts, …
Run Code Online (Sandbox Code Playgroud)

refactoring dry composition go

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

如何理想地处理套接字异常?

我正在使用socket进行聊天应用程序,我意外地得到了SocketException.理想情况下应如何处理此异常?我目前只是重新连接socket.如何确保我的套接字在应用程序级别上运行?我知道方法setKeepAlive

java sockets

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