Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ssh 公钥认证_Ssh_Cryptography_Blockchain_Public Key Encryption_Public Key - Fatal编程技术网

Ssh 公钥认证

Ssh 公钥认证,ssh,cryptography,blockchain,public-key-encryption,public-key,Ssh,Cryptography,Blockchain,Public Key Encryption,Public Key,我一直在设计一种基于区块链的加密货币,区块链上的一些区块可以由区块所有者更新其数据。我尝试实现ssh风格的公钥身份验证:客户机生成一个密钥对,并将公钥发送到块,它允许“admins”下列出的公钥更改块的元数据。问题是,有人可以发送随机的已知公钥来查看是否允许他们编辑元数据,ssh如何防止人们只发送某种带有已知公钥的字符串来访问ssh的内容?(我问这个问题是因为我想实现类似于我的上下文的东西)不确定这是否真的是一个编程问题,但是: SSH总是使用公钥对“主机”(服务器)和“用户”(客户端)进行身份

我一直在设计一种基于区块链的加密货币,区块链上的一些区块可以由区块所有者更新其数据。我尝试实现ssh风格的公钥身份验证:客户机生成一个密钥对,并将公钥发送到块,它允许“admins”下列出的公钥更改块的元数据。问题是,有人可以发送随机的已知公钥来查看是否允许他们编辑元数据,ssh如何防止人们只发送某种带有已知公钥的字符串来访问ssh的内容?(我问这个问题是因为我想实现类似于我的上下文的东西)

不确定这是否真的是一个编程问题,但是:

SSH总是使用公钥对“主机”(服务器)和“用户”(客户端)进行身份验证(但经常)。对于后一种情况,常用的和事实上的标准实现OpenSSH为服务器上的每个用户使用一个文件,通常位于用户的主目录下,
$home/.ssh/authorized_keys
,其中列出了对该用户有效的公钥。如果客户端进程指定该用户的授权密钥文件中列出的用户名和公钥,并使用私钥对某些数据(包括连接密钥和nonce)进行签名,则认为该数据可证明用户的身份。(有关详细信息,请参见RFC 4252,但从4253开始了解上下文。)其他实现需要具有等效的数据,尽管不一定是那个确切的文件。主机/服务器通常允许用户/客户端进行多次尝试,以防它有多个键和/或其他方法要尝试,但这是可配置的

SSH本身基本上不控制访问;它只是将用户/客户端的身份建立为“主机”上配置的用户名。使用该身份控制访问——安全人员称之为授权,而不是身份验证和身份验证——取决于主机。许多SSH主机都是Unix,对于Unix,通过SSH访问Unix的规则与其他类型的连接的规则相同:这从每个文件上的经典“chmod位”开始,允许读取、写入、执行用户、组、其他,还可以包括ACL、SELinux属性、sudo规则、信令进程的组匹配、,一些东西的特殊配置,如NFS等。如果SSH主机/服务器不是Unix,那么一旦您连接并验证了它,它将应用什么安全规则或策略取决于它,并且可能会有很大的不同


OpenSSH(在Unix主机上)还实现了
authorized_key
文件中的一些选项,这些选项对客户端可以执行的操作(通过该连接)施加了额外的限制;请参阅系统上的man sshd。此外,正如这里所指出的,OpenSSH支持一种间接级别:您可以使用(指定的)“CA”密钥对其他密钥进行签名,然后配置授权密钥以接受由列出的CA密钥签名的任何密钥,而不是直接列出每个适用用户的授权密钥文件中的每个密钥。这些证书本身可以包括一些限制;看见在有许多用户、主机或两者都有的大型环境中,这可能更方便。

“问题是,有人可以发送随机的已知公钥,以查看是否允许他们编辑元数据”您认为这是为什么?区块链的一个核心属性是,它在被链上更高的区块签名后是不可更改的。这意味着“admins”部分中的公钥不能更改。因此,如果要将消息添加到引用“your”块的后续块中,则必须使用与存储在“your”块中的公钥相对应的私钥对消息进行签名。您可以使用一种消息类型来添加公钥,该公钥也是经过签名的。我创建的体系结构的安全性很差。当私有实体拥有的块更新时,它将查询公钥(存储在块中的一个字段中),并随公钥一起追加、删除或更改存储在块中的特定密钥和/或字段。因此,如果您知道允许更改数据的公钥(通常发生在分布式账本上),您可以更改一个不是您的块,并在链的下游进一步更新它。我相信我可能已经想到了一个更安全的方法来做这件事,我会分享我的发现时,它的工作。谢谢你的回复。非常有洞察力和帮助。谢谢你的回复。我将在应用程序中吸收这些知识,并在安全性方面取得成功后更新此线程。