mirror of
https://git.hardenedbsd.org/hardenedbsd/HardenedBSD.git
synced 2024-11-21 18:50:50 +01:00
f3343fe4a6
The last example in the manpage md5(1) wants to demonstrate GNU mode (md5sum), but uses BSD mode (md5) instead. In GNU mode, the -c option does not compare against a hash string passed as parameter. Instead, it expects a digest file, as created under the name digest for /boot/loader.conf in the example above. PR: 276560 Reviewed by: mhorne, des MFC after: 3 days Differential Revision: https://reviews.freebsd.org/D44098
441 lines
12 KiB
Groff
441 lines
12 KiB
Groff
.Dd March 12, 2024
|
|
.Dt MD5 1
|
|
.Os
|
|
.Sh NAME
|
|
.Nm md5 , sha1 , sha224 , sha256 , sha384 ,
|
|
.Nm sha512 , sha512t224 , sha512t256 ,
|
|
.Nm rmd160 , skein256 , skein512 , skein1024 ,
|
|
.Nm md5sum , sha1sum , sha224sum , sha256sum , sha384sum ,
|
|
.Nm sha512sum , sha512t224sum , sha512t256sum ,
|
|
.Nm rmd160sum , skein256sum , skein512sum , skein1024sum ,
|
|
.Nm shasum
|
|
.Nd calculate a message-digest fingerprint (checksum) for a file
|
|
.Sh SYNOPSIS
|
|
.Nm
|
|
.Op Fl pqrtx
|
|
.Op Fl c Ar string
|
|
.Op Fl s Ar string
|
|
.Op Ar
|
|
.Pp
|
|
.Nm md5sum
|
|
.Op Fl bctwz
|
|
.Op Fl -binary
|
|
.Op Fl -check
|
|
.Op Fl -help
|
|
.Op Fl -ignore-missing
|
|
.Op Fl -quiet
|
|
.Op Fl -status
|
|
.Op Fl -strict
|
|
.Op Fl -tag
|
|
.Op Fl -text
|
|
.Op Fl -version
|
|
.Op Fl -warn
|
|
.Op Fl -zero
|
|
.Op Ar
|
|
.Pp
|
|
(All other hashes have the same options and usage.)
|
|
.Pp
|
|
.Nm shasum
|
|
.Op Fl 0bchqstUvw
|
|
.Op Fl -01
|
|
.Op Fl a | -algorithm Ar alg
|
|
.Op Fl -binary
|
|
.Op Fl -check
|
|
.Op Fl -help
|
|
.Op Fl -ignore-missing
|
|
.Op Fl -quiet
|
|
.Op Fl -status
|
|
.Op Fl -strict
|
|
.Op Fl -tag
|
|
.Op Fl -text
|
|
.Op Fl -UNIVERSAL
|
|
.Op Fl -version
|
|
.Op Fl -warn
|
|
.Op Ar
|
|
.Sh DESCRIPTION
|
|
The
|
|
.Nm md5 , sha1 , sha224 , sha256 , sha384 , sha512 , sha512t224 , sha512t256 ,
|
|
.Nm rmd160 , skein256 , skein512 ,
|
|
and
|
|
.Nm skein1024
|
|
utilities take as input a message of arbitrary length and produce as
|
|
output a
|
|
.Dq fingerprint
|
|
or
|
|
.Dq message digest
|
|
of the input.
|
|
.Pp
|
|
The
|
|
.Nm md5sum , sha1sum , sha224sum , sha256sum , sha384sum , sha512sum ,
|
|
.Nm sha512t224sum , sha512t256sum , rmd160sum , skein256sum , skein512sum ,
|
|
and
|
|
.Nm skein1024sum
|
|
utilities do the same, but with command-line options and an output
|
|
format that match those of their similary named GNU utilities.
|
|
.Pp
|
|
The
|
|
.Nm shasum
|
|
utility does the same, but with command-line options and an output
|
|
format that match those of the similarly named utility that ships with
|
|
Perl.
|
|
.Pp
|
|
In all cases, each file listed on the command line is processed separately.
|
|
If no files are listed on the command line, or a file name is given as
|
|
.Pa - ,
|
|
input is taken from stdin instead.
|
|
.Pp
|
|
It is conjectured that it is computationally infeasible to
|
|
produce two messages having the same message digest, or to produce any
|
|
message having a given prespecified target message digest.
|
|
The SHA-224 , SHA-256 , SHA-384 , SHA-512, RIPEMD-160,
|
|
and SKEIN
|
|
algorithms are intended for digital signature applications, where a
|
|
large file must be
|
|
.Dq compressed
|
|
in a secure manner before being encrypted with a private
|
|
(secret)
|
|
key under a public-key cryptosystem such as RSA.
|
|
.Pp
|
|
The MD5 and SHA-1 algorithms have been proven to be vulnerable to practical
|
|
collision attacks and should not be relied upon to produce unique outputs,
|
|
.Em nor should they be used as part of a cryptographic signature scheme.
|
|
As of 2017-03-02, there is no publicly known method to
|
|
.Em reverse
|
|
either algorithm, i.e., to find an input that produces a specific
|
|
output.
|
|
.Pp
|
|
SHA-512t256 is a version of SHA-512 truncated to only 256 bits.
|
|
On 64-bit hardware, this algorithm is approximately 50% faster than SHA-256 but
|
|
with the same level of security.
|
|
The hashes are not interchangeable.
|
|
.Pp
|
|
SHA-512t224 is identical to SHA-512t256, but with the digest truncated
|
|
to 224 bits.
|
|
.Pp
|
|
It is recommended that all new applications use SHA-512 or SKEIN-512
|
|
instead of one of the other hash functions.
|
|
.Ss BSD OPTIONS
|
|
The following options are available in BSD mode, i.e. when the program
|
|
is invoked with a name that does not end in
|
|
.Dq sum :
|
|
.Bl -tag -width indent
|
|
.It Fl c Ar string , Fl -check= Ns Ar string
|
|
Compare the digest of the file against this string.
|
|
If combined with the
|
|
.Fl q
|
|
or
|
|
.Fl -quiet
|
|
option, the calculated digest is printed in addition to the exit status being set.
|
|
.Pq Note that this option is not yet useful if multiple files are specified.
|
|
.It Fl p , -passthrough
|
|
Echo stdin to stdout and append the checksum to stdout.
|
|
In this mode, any files specified on the command line are silently ignored.
|
|
.It Fl q , -quiet
|
|
Quiet mode \(em only the checksum is printed out.
|
|
Overrides the
|
|
.Fl r
|
|
or
|
|
.Fl -reverse
|
|
option.
|
|
.It Fl r , -reverse
|
|
Reverses the format of the output.
|
|
This helps with visual diffs.
|
|
Does nothing
|
|
when combined with the
|
|
.Fl ptx
|
|
options.
|
|
.It Fl s Ar string , Fl -string= Ns Ar string
|
|
Print a checksum of the given
|
|
.Ar string .
|
|
In this mode, any files specified on the command line are silently ignored.
|
|
.It Fl t , Fl -time-trial
|
|
Run a built-in time trial.
|
|
For the
|
|
.Nm -sum
|
|
versions, this is a nop for compatibility with coreutils.
|
|
.It Fl x , Fl -self-test
|
|
Run a built-in test script.
|
|
.El
|
|
.Ss GNU OPTIONS
|
|
The following options are available in GNU mode, i.e. when the program
|
|
is invoked with a name that ends in
|
|
.Dq sum :
|
|
.Bl -tag -width indent
|
|
.It Fl b , Fl -binary
|
|
Read files in binary mode.
|
|
.It Fl c , Fl -check
|
|
The file passed as arguments must contain digest lines generated by the same
|
|
digest algorithm in either classical BSD format or in GNU coreutils format.
|
|
A line with the file name followed by a colon
|
|
.Dq ":"
|
|
and either OK or FAILED is written for each well-formed line in the digest file.
|
|
If applicable, the number of failed comparisons and the number of lines that were
|
|
skipped since they were not well-formed are printed at the end.
|
|
The
|
|
.Fl -quiet
|
|
option can be used to quiesce the output unless there are mismatched entries in
|
|
the digest.
|
|
.It Fl -help
|
|
Print a usage message and exit.
|
|
.It Fl -ignore-missing
|
|
When verifying checksums, ignore files for which checksums are given
|
|
but which aren't found on disk.
|
|
.It Fl -quiet
|
|
When verifying checksums, do not print anything unless the
|
|
verification fails.
|
|
.It Fl -status
|
|
When verifying checksums, do not print anything at all.
|
|
The exit code will reflect whether verification succeeded.
|
|
.It Fl -strict
|
|
When verifying checksums, fail if the input is malformed.
|
|
.It Fl -tag
|
|
Produce BSD-style output.
|
|
.It Fl t , Fl -text
|
|
Read files in text mode.
|
|
This is the default.
|
|
Note that this implementation does not differentiate between binary
|
|
and text mode.
|
|
.It Fl -version
|
|
Print version information and exit.
|
|
.It Fl w , Fl -warn
|
|
When verifying checksums, warn about malformed input.
|
|
.It Fl z , Fl -zero
|
|
Terminate output lines with NUL rather than with newline.
|
|
.El
|
|
.Ss PERL OPTIONS
|
|
The following options are available in Perl mode, i.e. when the program
|
|
is invoked with the name
|
|
.Dq shasum :
|
|
.Bl -tag -width indent
|
|
.It Fl 0 , Fl -01
|
|
Read files in bits mode: ASCII
|
|
.Sq 0
|
|
and
|
|
.Sq 1
|
|
characters correspond to 0 and 1 bits, respectively, and all other
|
|
characters are ignored.
|
|
See
|
|
.Sx BUGS .
|
|
.It Fl a Ar alg , Fl -algorithm Ar alg
|
|
Use the specified algorithm:
|
|
.Dq 1
|
|
for SHA-1 (default),
|
|
.Dq xxx
|
|
for
|
|
.Va xxx Ns -bit
|
|
SHA-2 (e.g.
|
|
.Dq 256
|
|
for SHA-256)
|
|
or
|
|
.Dq xxxyyy
|
|
for
|
|
.Va xxx Ns -bit
|
|
SHA-2 truncated to
|
|
.Va yyy
|
|
bits (e.g.
|
|
.Dq 512224
|
|
for SHA-512/224).
|
|
.It Fl b , Fl -binary
|
|
Read files in binary mode.
|
|
.It Fl c , Fl -check
|
|
The file passed as arguments must contain digest lines generated by the same
|
|
digest algorithm in either classical BSD format or in GNU coreutils format.
|
|
A line with the file name followed by a colon
|
|
.Dq ":"
|
|
and either OK or FAILED is written for each well-formed line in the digest file.
|
|
If applicable, the number of failed comparisons and the number of lines that were
|
|
skipped since they were not well-formed are printed at the end.
|
|
The
|
|
.Fl -quiet
|
|
option can be used to quiesce the output unless there are mismatched entries in
|
|
the digest.
|
|
.It Fl -help
|
|
Print a usage message and exit.
|
|
.It Fl -ignore-missing
|
|
When verifying checksums, ignore files for which checksums are given
|
|
but which aren't found on disk.
|
|
.It Fl -quiet
|
|
When verifying checksums, do not print anything unless the
|
|
verification fails.
|
|
.It Fl -status
|
|
When verifying checksums, do not print anything at all.
|
|
The exit code will reflect whether verification succeeded.
|
|
.It Fl -strict
|
|
When verifying checksums, fail if the input is malformed.
|
|
.It Fl -tag
|
|
Produce BSD-style output.
|
|
.It Fl t , Fl -text
|
|
Read files in text mode.
|
|
This is the default.
|
|
Note that this implementation does not differentiate between binary
|
|
and text mode.
|
|
.It Fl U , Fl -UNIVERSAL
|
|
Read files in universal mode: any CR-LF pair, as well as any CR not
|
|
followed by LF, is translated to LF before the digest is computed.
|
|
.It Fl -version
|
|
Print version information and exit.
|
|
.It Fl w , Fl -warn
|
|
When verifying checksums, warn about malformed input.
|
|
.El
|
|
.Sh EXIT STATUS
|
|
The
|
|
.Nm md5 , sha1 , sha224 , sha256 , sha384 , sha512 ,
|
|
.Nm sha512t224 , sha512t256 ,
|
|
.Nm rmd160 , skein256 , skein512 ,
|
|
and
|
|
.Nm skein1024
|
|
utilities exit 0 on success,
|
|
1 if at least one of the input files could not be read,
|
|
and 2 if at least one file does not have the same hash as the
|
|
.Fl c
|
|
option.
|
|
.Pp
|
|
The
|
|
.Nm md5sum , sha1sum , sha224sum , sha256sum , sha384sum , sha512sum ,
|
|
.Nm sha512t224sum , sha512t256sum ,
|
|
.Nm rmd160 , skein256 , skein512 , skein1024
|
|
and
|
|
.Nm shasum
|
|
utilities exit 0 on success and 1 if at least one of the input files
|
|
could not be read or, when verifying checksums, does not have the
|
|
expected checksum.
|
|
.Sh EXAMPLES
|
|
Calculate the MD5 checksum of the string
|
|
.Dq Hello .
|
|
.Bd -literal -offset indent
|
|
$ md5 -s Hello
|
|
MD5 ("Hello") = 8b1a9953c4611296a827abf8c47804d7
|
|
.Ed
|
|
.Pp
|
|
Same as above, but note the absence of the newline character in the input
|
|
string:
|
|
.Bd -literal -offset indent
|
|
$ echo -n Hello | md5
|
|
8b1a9953c4611296a827abf8c47804d7
|
|
.Ed
|
|
.Pp
|
|
Calculate the checksum of multiple files reversing the output:
|
|
.Bd -literal -offset indent
|
|
$ md5 -r /boot/loader.conf /etc/rc.conf
|
|
ada5f60f23af88ff95b8091d6d67bef6 /boot/loader.conf
|
|
d80bf36c332dc0fdc479366ec3fa44cd /etc/rc.conf
|
|
.Ed
|
|
.Pp
|
|
This is almost but not quite identical to the output from GNU mode:
|
|
.Bd -literal -offset indent
|
|
$ md5sum /boot/loader.conf /etc/rc.conf
|
|
ada5f60f23af88ff95b8091d6d67bef6 /boot/loader.conf
|
|
d80bf36c332dc0fdc479366ec3fa44cd /etc/rc.conf
|
|
.Ed
|
|
.Pp
|
|
Note the two spaces between hash and file name.
|
|
If binary mode is requested, they are instead separated by a space and
|
|
an asterisk:
|
|
.Bd -literal -offset indent
|
|
$ md5sum -b /boot/loader.conf /etc/rc.conf
|
|
ada5f60f23af88ff95b8091d6d67bef6 */boot/loader.conf
|
|
d80bf36c332dc0fdc479366ec3fa44cd */etc/rc.conf
|
|
.Ed
|
|
.Pp
|
|
Write the digest for
|
|
.Pa /boot/loader.conf
|
|
in a file named
|
|
.Pa digest .
|
|
Then calculate the checksum again and validate it against the checksum string
|
|
extracted from the
|
|
.Pa digest
|
|
file:
|
|
.Bd -literal -offset indent
|
|
$ md5 /boot/loader.conf > digest && md5 -c $(cut -f2 -d= digest) /boot/loader.conf
|
|
MD5 (/boot/loader.conf) = ada5f60f23af88ff95b8091d6d67bef6
|
|
.Ed
|
|
.Pp
|
|
Same as above but comparing the digest against an invalid string
|
|
.Pq Dq randomstring ,
|
|
which results in a failure.
|
|
.Bd -literal -offset indent
|
|
$ md5 -c randomstring /boot/loader.conf
|
|
MD5 (/boot/loader.conf) = ada5f60f23af88ff95b8091d6d67bef6 [ Failed ]
|
|
.Ed
|
|
.Pp
|
|
In GNU mode, the
|
|
.Fl c
|
|
option does not compare against a hash string passed as parameter.
|
|
Instead, it expects a digest file, as created under the name
|
|
.Pa digest
|
|
for
|
|
.Pa /boot/loader.conf
|
|
in the example above.
|
|
.Bd -literal -offset indent
|
|
$ md5sum -c digest
|
|
/boot/loader.conf: OK
|
|
.Ed
|
|
.Pp
|
|
The digest file may contain any number of lines in the format
|
|
generated in either BSD or GNU mode.
|
|
If a hash value does not match the file,
|
|
.Dq FAILED
|
|
is printed instead of
|
|
.Dq OK .
|
|
.Sh SEE ALSO
|
|
.Xr cksum 1 ,
|
|
.Xr md5 3 ,
|
|
.Xr ripemd 3 ,
|
|
.Xr sha 3 ,
|
|
.Xr sha256 3 ,
|
|
.Xr sha384 3 ,
|
|
.Xr sha512 3 ,
|
|
.Xr skein 3
|
|
.Rs
|
|
.%A R. Rivest
|
|
.%T The MD5 Message-Digest Algorithm
|
|
.%O RFC1321
|
|
.Re
|
|
.Rs
|
|
.%A J. Burrows
|
|
.%T The Secure Hash Standard
|
|
.%O FIPS PUB 180-2
|
|
.Re
|
|
.Rs
|
|
.%A D. Eastlake and P. Jones
|
|
.%T US Secure Hash Algorithm 1
|
|
.%O RFC 3174
|
|
.Re
|
|
.Pp
|
|
RIPEMD-160 is part of the ISO draft standard
|
|
.Qq ISO/IEC DIS 10118-3
|
|
on dedicated hash functions.
|
|
.Pp
|
|
Secure Hash Standard (SHS):
|
|
.Pa https://www.nist.gov/publications/secure-hash-standard-shs
|
|
.Pp
|
|
The RIPEMD-160 page:
|
|
.Pa https://homes.esat.kuleuven.be/~bosselae/ripemd160.html
|
|
.Sh BUGS
|
|
In bits mode, the original
|
|
.Nm shasum
|
|
script is capable of processing inputs of arbitrary length.
|
|
This implementation is not, and will issue an error if the input
|
|
length is not a multiple of eight bits.
|
|
.Sh ACKNOWLEDGMENTS
|
|
.An -nosplit
|
|
This utility was originally derived from a program which was placed in
|
|
the public domain for free general use by RSA Data Security.
|
|
.Pp
|
|
Support for SHA-1 and RIPEMD-160 was added by
|
|
.An Oliver Eikemeier Aq Mt eik@FreeBSD.org .
|
|
.Pp
|
|
Support for SHA-2 was added by
|
|
.An Colin Percival Aq Mt cperciva@FreeBSD.org
|
|
and
|
|
.An Allan Jude Aq Mt allanjude@FreeBSD.org .
|
|
.Pp
|
|
Support for SKEIN was added by
|
|
.An Allan Jude Aq Mt allanjude@FreeBSD.org .
|
|
.Pp
|
|
Compatibility with GNU coreutils was added by
|
|
.An Warner Losh Aq Mt imp@FreeBSD.org
|
|
and much expanded by
|
|
.An Dag-Erling Sm\(/orgrav Aq Mt des@FreeBSD.org ,
|
|
who also added Perl compatibility.
|