首页 / 币百科

公钥和私钥的区别(公钥和私钥的多种用途)

发布时间:2022-12-12 17:50:52
欧意最新版本

欧意最新版本

欧意最新版本app是一款安全、稳定、可靠的数字货币交易平台。

APP下载  官网地址

公钥与私钥的区别与应用。

现实生活中,我要给依依转1个比特币,我需要在比特币交易平台、比特币钱包或者比特币客户端里面,输入我的比特币钱包地址、依依的钱包地址、转出比特币的数量、手续费。然后,我们等十分钟左右,矿工处理完交易信息之后,这1个比特币就成功地转给依依了。

这个过程看似很简单也很便捷,跟我们现在的银行卡转账没什么区别,但是,你知道这个过程是怎样在比特币系统里面实现的吗?它隐藏了哪些原理呢?又或者,它是如何保证交易能够在一个安全的环境下进行呢?

我们今天就来讲一讲。

对于转出方和接收方来讲,也就是我和依依(我是转出方,依依是接收方)我们都需要出具两个东西:钱包地址、私钥。

我们先说钱包地址。比特币钱包地址其实就相当于银行卡、支付宝账号、微信钱包账号,是比特币支付转账的“凭证”,记录着平台与平台、钱包钱包钱包与平台之间的转账信息。

我们在使用银行卡、支付宝、微信转账时都需要密码,才能够支付成功。那么,在比特币转账中,同样也有这么一个“密码”,这个“密码“被称作“私钥”。掌握了私钥,就掌握了其对应比特币地址上的生杀大权。

“私钥”是属于“非对称加密算法”里面的概念,与之对应的还有另一个概念,名叫:“公钥”。

公钥和私钥,从字面意思我们就可以理解:公钥,是可以公开的;而私钥,是私人的、你自己拥有的、需要绝对保密的。

公钥是根据私钥计算形成的,比特币系统使用的是椭圆曲线加密算法,来根据私钥计算出公钥。这就使得,公钥和私钥形成了唯一对应的关系:当你用了其中一把钥匙加密信息时,只有配对的另一把钥匙才能解密。所以,正是基于这种唯一对应的关系,它们可以用来验证信息发送方的身份,还可以做到绝对的保密。

我们举个例子讲一下,在非对称加密算法中,公钥和私钥是怎么运作的。

我们知道,公钥是可以对外公开的,那么,所有人都知道我们的公钥。在转账过程中,我不仅要确保比特币转给依依,而不会转给别人,还得让依依知道,这些比特币是我转给她的,不是鹿鹿,也不是韭哥。

比特币系统可以满足我的上述诉求:比特币系统会把我的交易信息缩短成固定长度的字符串,也就是一段摘要,然后把我的私钥附在这个摘要上,形成一个数字签名。因为数字签名里面隐含了我的私钥信息,所以,数字签名可以证明我的身份。

完成之后,完整的交易信息和数字签名会一起广播给矿工,矿工用我的公钥进行验证、看看我的公钥和我的数字签名能不能匹配上,如果验证成功,都没问题,那么,就能够说明这个交易确实是我发出的,而且信息没有被更改。

接下来,矿工需要验证,这笔交易花费的比特币是否是“未被花费”的交易。如果验证成功,则将其放入“未确认交易”,等待被打包;如果验证失败,则该交易会被标记为“无效交易”,不会被打包。

其实,公钥和私钥,简单理解就是:既然是加密,那肯定是不希望别人知道我的消息,所以只能我才能解密,所以可得出:公钥负责加密,私钥负责解密;同理,既然是签名,那肯定是不希望有人冒充我的身份,只有我才能发布这个数字签名,所以可得出:私钥负责签名,公钥负责验证。

到这里,我们简单概括一下上面的内容。上面我们主要讲到这么几个词:私钥、公钥、钱包地址、数字签名,它们之间的关系我们理一下:

(1)私钥是系统随机生成的,公钥是由私钥计算得出的,钱包地址是由公钥计算得出的,也就是:私钥——公钥——钱包地址,这样一个过程;

(2)数字签名,是由交易信息+私钥信息计算得出的,因为数字签名隐含私钥信息,所以可以证明自己的身份。

私钥、公钥都是密码学范畴的,属于“非对称加密”算法中的“椭圆加密算法”,之所以采用这种算法,是为了保障交易的安全,二者的作用在于:

(1)公钥加密,私钥解密:公钥全网公开,我用依依的公钥给信息加密,依依用自己的私钥可以解密;

(2)私钥签名,公钥验证:我给依依发信息,我加上我自己的私钥信息形成数字签名,依依用我的公钥来验证,验证成功就证明的确是我发送的信息。

只不过,在比特币交易中,加密解密啦、验证啦这些都交给矿工了。

至于我们现在经常用的钱包app,只不过是私钥、钱包地址和其他区块链数据的管理工具而已。钱包又分冷钱包和热钱包,冷钱包是离线的,永远不联网的,一般是以一些实体的形式出现,比如小本子什么的;热钱包是联网的,我们用的钱包app就属于热钱包

公钥和私钥技术的区别

(一)对称加密(Symmetric Cryptography)

对称加密是最快速、最简单的一种加密方式,加密(encryption)与解密(decryption)用的是同样的密钥(secret key),这种方法在密码学中叫做对称加密算法。对称加密有很多种算法,由于它效率很高,所以被广泛使用在很多加密协议的核心当中。

对称加密通常使用的是相对较小的密钥,一般小于256 bit。因为密钥越大,加密越强,但加密与解密的过程越慢。如果你只用1 bit来做这个密钥,那黑客们可以先试着用0来解密,不行的话就再用1解;但如果你的密钥有1 MB大,黑客们可能永远也无法破解,但加密和解密的过程要花费很长的时间。密钥的大小既要照顾到安全性,也要照顾到效率,是一个trade-off。

2000年10月2日,美国国家标准与技术研究所(NIST--American National Institute of Standards and Technology)选择了Rijndael算法作为新的高级加密标准(AES--Advanced Encryption Standard)。.NET中包含了Rijndael算法,类名叫RijndaelManaged,下面举个例子。

加密过程:

private string myData = "hello";

private string myPassword = "OpenSesame";

private byte[] cipherText;

private byte[] salt = { 0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x5, 0x4, 0x3, 0x2, 0x1, 0x0 };

private void mnuSymmetricEncryption_Click(object sender, RoutedEventArgs e)

{

var key = new Rfc2898DeriveBytes(myPassword, salt);

// Encrypt the data.

var algorithm = new RijndaelManaged();

algorithm.Key = key.GetBytes(16);

algorithm.IV = key.GetBytes(16);

var sourceBytes = new System.Text.UnicodeEncoding().GetBytes(myData);

using (var sourceStream = new MemoryStream(sourceBytes))

using (var destinationStream = new MemoryStream())

using (var crypto = new CryptoStream(sourceStream, algorithm.CreateEncryptor(), CryptoStreamMode.Read))

{

moveBytes(crypto, destinationStream);

cipherText = destinationStream.ToArray();

}

MessageBox.Show(String.Format("Data:{0}{1}Encrypted and Encoded:{2}", myData, Environment.NewLine, Convert.ToBase64String(cipherText)));

}

private void moveBytes(Stream source, Stream dest)

{

byte[] bytes = new byte[2048];

var count = source.Read(bytes, 0, bytes.Length);

while (0 != count)

{

dest.Write(bytes, 0, count);

count = source.Read(bytes, 0, bytes.Length);

}

}

解密过程:

private void mnuSymmetricDecryption_Click(object sender, RoutedEventArgs e)

{

if (cipherText == null)

{

MessageBox.Show("Encrypt Data First!");

return;

}

var key = new Rfc2898DeriveBytes(myPassword, salt);

// Try to decrypt, thus showing it can be round-tripped.

var algorithm = new RijndaelManaged();

algorithm.Key = key.GetBytes(16);

algorithm.IV = key.GetBytes(16);

using (var sourceStream = new MemoryStream(cipherText))

using (var destinationStream = new MemoryStream())

using (var crypto = new CryptoStream(sourceStream, algorithm.CreateDecryptor(), CryptoStreamMode.Read))

{

moveBytes(crypto, destinationStream);

var decryptedBytes = destinationStream.ToArray();

var decryptedMessage = new UnicodeEncoding().GetString(

decryptedBytes);

MessageBox.Show(decryptedMessage);

}

}

对称加密的一大缺点是密钥的管理与分配,换句话说,如何把密钥发送到需要解密你的消息的人的手里是一个问题。在发送密钥的过程中,密钥有很大的风险会被黑客们拦截。现实中通常的做法是将对称加密的密钥进行非对称加密,然后传送给需要它的人。

(二)非对称加密(Asymmetric Cryptography)

1976年,美国学者Dime和Henman为解决信息公开传送和密钥管理问题,提出一种新的密钥交换协议,允许在不安全的媒体上的通讯双方交换信息,安全地达成一致的密钥,这就是“公开密钥系统”。相对于“对称加密算法”这种方法也叫做“非对称加密算法”。

非对称加密为数据的加密与解密提供了一个非常安全的方法,它使用了一对密钥,公钥(public key)和私钥(private key)。私钥只能由一方安全保管,不能外泄,而公钥则可以发给任何请求它的人。非对称加密使用这对密钥中的一个进行加密,而解密则需要另一个密钥。比如,你向银行请求公钥,银行将公钥发给你,你使用公钥对消息加密,那么只有私钥的持有人--银行才能对你的消息解密。与对称加密不同的是,银行不需要将私钥通过网络发送出去,因此安全性大大提高。

目前最常用的非对称加密算法是RSA算法,是Rivest, Shamir, 和Adleman于1978年发明,他们那时都是在MIT。.NET中也有RSA算法,请看下面的例子:

加密过程:

private byte[] rsaCipherText;

private void mnuAsymmetricEncryption_Click(object sender, RoutedEventArgs e)

{

var rsa = 1;

// Encrypt the data.

var cspParms = new CspParameters(rsa);

cspParms.Flags = CspProviderFlags.UseMachineKeyStore;

cspParms.KeyContainerName = "My Keys";

var algorithm = new RSACryptoServiceProvider(cspParms);

var sourceBytes = new UnicodeEncoding().GetBytes(myData);

rsaCipherText = algorithm.Encrypt(sourceBytes, true);

MessageBox.Show(String.Format("Data: {0}{1}Encrypted and Encoded: {2}",

myData, Environment.NewLine,

Convert.ToBase64String(rsaCipherText)));

}

解密过程:

private void mnuAsymmetricDecryption_Click(object sender, RoutedEventArgs e)

{

if(rsaCipherText==null)

{

MessageBox.Show("Encrypt First!");

return;

}

var rsa = 1;

// decrypt the data.

var cspParms = new CspParameters(rsa);

cspParms.Flags = CspProviderFlags.UseMachineKeyStore;

cspParms.KeyContainerName = "My Keys";

var algorithm = new RSACryptoServiceProvider(cspParms);

var unencrypted = algorithm.Decrypt(rsaCipherText, true);

MessageBox.Show(new UnicodeEncoding().GetString(unencrypted));

}

虽然非对称加密很安全,但是和对称加密比起来,它非常的慢,所以我们还是要用对称加密来传送消息,但对称加密所使用的密钥我们可以通过非对称加密的方式发送出去。为了解释这个过程,请看下面的例子:

(1) Alice需要在银行的网站做一笔交易,她的浏览器首先生成了一个随机数作为对称密钥。

(2) Alice的浏览器向银行的网站请求公钥。

(3) 银行将公钥发送给Alice。

(4) Alice的浏览器使用银行的公钥将自己的对称密钥加密。

(5) Alice的浏览器将加密后的对称密钥发送给银行。

(6) 银行使用私钥解密得到Alice浏览器的对称密钥。

(7) Alice与银行可以使用对称密钥来对沟通的内容进行加密与解密了。

(三)总结

(1) 对称加密加密与解密使用的是同样的密钥,所以速度快,但由于需要将密钥在网络传输,所以安全性不高。

(2) 非对称加密使用了一对密钥,公钥与私钥,所以安全性高,但加密与解密速度慢。

(3) 解决的办法是将对称加密的密钥使用非对称加密的公钥进行加密,然后发送出去,接收方使用私钥进行解密得到对称加密的密钥,然后双方可以使用对称加密来进行沟通。

私钥、公钥、证书的区别和关系

1.首先我们需要区分加密和认证这两个基本概念。

加密是将数据资料加密,使得非法用户即使取得加密过的资料,也无法获取正确的资料内容,所以数据加密可以保护数据,防止监听攻击。其重点在于数据的安全性。身份认证是用来判断某个身份的真实性,确认身份后,系统才可以依不同的身份给予不同的权限。其重点在于用户的真实性。两者的侧重点是不同的。

2.其次我们还要了解公钥和私钥的概念和作用。

在现代密码体制中加密和解密是采用不同的密钥(公开密钥),也就是非对称密钥密码系统,每个通信方均需要两个密钥,即公钥和私钥,这两把密钥可以互为加解密。公钥是公开的,不需要保密,而私钥是由个人自己持有,并且必须妥善保管和注意保密。

公钥私钥的原则:

一个公钥对应一个私钥。

密钥对中,让大家都知道的是公钥,不告诉大家,只有自己知道的,是私钥。

如果用其中一个密钥加密数据,则只有对应的那个密钥才可以解密。

如果用其中一个密钥可以进行解密数据,则该数据必然是对应的那个密钥进行的加密。

谁能告诉我什么是公钥什么是私钥各起什么作用?那一个具有唯一性,不可复制及伪造性每次使用必须提交验证

公钥和私钥是成对生成的 用于非対称加密算法

主要是两个用途:

1.私钥加密,公钥解密

这种方式用于数字签名,有不可抵赖性。因为密钥在你手里,用B密钥签名的数据而用A公钥是解不开的。反之,只要是用A公钥解开的数据,就说明者数据为A私钥所签名。

2.公钥加密,私钥解密

把公钥公布,每个人都可以用该公钥加密后的文件发送给你,即使数据在途中被截获,没有我的私钥是破解不了的;

我这么说,你应该明白了吧?

要给奖分哦。

私钥和公钥的区别

公钥是原装锁自带的钥匙,一般只有几把。如果需要可以到外面另外配一把钥匙。

配的钥匙可以打开门,但是外形上还是可以分辨出来的。

什么是公钥和私钥?

公钥和私钥是通过一种算法得到的一个密钥对(即一个公钥和一个私钥),将其中的一个向外界公开,称为公钥;另一个自己保留,称为私钥。通过这种算法得到的密钥对能保证在世界范围内是唯一的。使用这个密钥对的时候,如果用其中一个密钥加密一段数据,必须用另一个密钥解密。比如用公钥加密数据就必须用私钥解密,如果用私钥加密也必须用公钥解密,否则解密将不会成功。

版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。

免责声明:本文为转载,非本网原创内容,不代表本网观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。

如有疑问请发送邮件至:bangqikeconnect@gmail.com