Linux - SecurityThis forum is for all security related questions.
Questions, tips, system compromises, firewalls, etc. are all included here.
Welcome to LinuxQuestions.org, a friendly and active Linux Community.
You are currently viewing LQ as a guest. By joining our community you will have the ability to post topics, receive our newsletter, use the advanced search, subscribe to threads and access many other special features. Registration is quick, simple and absolutely free. Join our community today!
Note that registered members see fewer ads, and ContentLink is completely disabled once you log in.
I'd like to know how public and private keys are working.
It would be the best if someone would explain it in example.
I downloaded kernel from www.kernel.org and there
was *.sign file next to it. Was it private key?.
I tried to verify kernel file in gpg and there was error:
no public key. I downloaded public key and imported it.
It worked. But how it works?. Why do I need public and
private key to verify file?.
I understand md5 verification:
someone generates md5 number (sequence of letters and numbers) on one computer and posts it on the web site with
file to be verified. Person who downloads file and number
can check if the number is correct.
But I can't fathom the idea of public and private keys.
Is this somehow similar?.
As the article explains ... keys come in pairs: a message encrypted by one can only be decrypted by the other, and vice-versa.
When you want to verify a signed file, you download the public key: the file's signature block is encrypted using the private key, so if it can be successfully decrypted by the public key, and it (the MD5 hash that it contains) matches the message, then it is considered "valid."
If you look at that web site, you will see only the public key. If you had access to the private key the packages were signed with, you would be able to sign packages as authentic - that is, coming from the official distribution. You can have your own private key, but you need someone else's public key to authenticate their signature. Read the Wikipedia article.
You import public keys, to add them to your keyring. A signed file (the extension doesn't mean anything), contains an encrypted hash of the data. You need a public key to decrypt and validate the data against the hash. Doing so authenticates the data - that it was signed by the person with the matching private key, and that it was not tampered with (no data was changed).
You can never have someone elses private key. Ever. That's why it's called a private key. The private key must be guarded like the key to a safe deposit box. Having the private key lets anyone prove they are the owner associated with a public key.
You can have your own private key. You would use your key to sign files and to encrypt files for others.
Last edited by macemoneta; 04-10-2006 at 11:30 AM.
But in case of this kernel example I don't decrypt data. I validate it only. So I import public key, yes?. OK I know what is public
key in this case. So this .sign file is not private key?.
So how is it called?. Is this signature?.
Let's return to MD5 authentication, there is one file to be downloaded and one which contains sequence of letters and numbers.
But such file with sequence is only one!!!.
I compare what md5 program prints out (refering to the file downloaded) and I know if the file is corrupted or not.
In case of "kernel" authentication there are two files. Why?.
Has private and public key the same format?.
Last edited by mac1234mac; 04-10-2006 at 12:12 PM.
But in case of this kernel example I don't decrypt data.
Yes, you are decrypting the hash to validate the signed file.
So I import public key, yes?
Yes, you import public keys for decrypting and validation of signed data.
So this .sign file is not private key?
No, it is not a private key. It is a signed file (the file+the signature) or the signature of a file (just the signature associated with a separate file).
In case of "kernel" authentication there are two files. Why?
The kernel developers have chosen to use a separate data file and signature:
linux-22.214.171.124.tar.bz2 - the linux kernel (the data file)
linux-126.96.36.199.tar.bz2.sign - signature (for the data file,linux-188.8.131.52.tar.bz2)
Validating the file with the signature means that the signature file will be decrypted using the kernel.org public key. This will yield a hash. The hash will be compared to the calculated value for the the data file (the kernel); if they match, the file has been validated. If they do not match, then either:
1. The data or signature file have been changed after the signature was made,
2. The private key used to sign the file is not the one associated with the public key used to validate it.
Last edited by macemoneta; 04-10-2006 at 12:44 PM.
Regarding the format of the public/private keys, they can both be in the same format, but usually are not.
The private key, since it is never sent to anyone, is usually stored in binary.
The public key is also stored in a binary format, but is also exported into an ASCII format suitable for transfer via email and web browser. It is this exported ASCII format that you import, returning it to its binary stored format.
So there is connection between private and public key?.
So you have generate your public and private key on your box,
you send public key to recipient and then what?. He can decrypt
data with your public key?. Either I got it wrong or it doesn't make
sense. Everyone who can get public key can decrypt such file?.
(I thing I've got it wrong...)
Everyone who can get public key can decrypt such file?.
(I thing I've got it wrong...)
Yes, you have it wrong. Again, I'd like to stress that this is explained more clearly in the Wikipedia article mentioned above.
Public and private keys are related mathematically; they constitute a key-pair.
When encrypting a file for someone, you use your private key and their public key. The receipient will then use their private key and your public key. As a result, only the intended recipient (the person with the private key matching the public key you used) can decode the file. In addition, since the senders public key is used, it validates that the file actually originated with that individual.
So, for example, I create public and private key, send public key
to another person, this person encrypts some file with his
private key, using my public key, and then sends encrypted file to me and I can
decrypt the file with my private key?. So public key must
contain information about private key?.
Last edited by mac1234mac; 04-11-2006 at 01:18 PM.
I can encrypt a message using your public key, and nobody other than the person who has the matching private key can decrypt it. so when you receive the decrypted message and apply your private key to decrypt it, the only way it will properly decrypt is if it was encrypted with your public key