The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Crypt::NaCl::Sodium::shorthash - Short-input hashing (SipHash-2-4)

VERSION

version 1.0.8.0

SYNOPSIS

    use Crypt::NaCl::Sodium qw( :utils );

    # for converting to 64-bit integers
    use Math::BigInt;

    my $crypto_shorthash = Crypt::NaCl::Sodium->shorthash();

    my ($key, $mac, $msg);

    # generate secret key
    $key = $crypto_shorthash->keygen();

    # list of short file names for which we are computing the checksums
    my @files = ...;

    for my $file ( @files ) {
        my $mac = $crypto_shorthash->mac( $file, $key );

        # MAC is 64-bit string
        print "$file\t", $mac->to_hex, "\n";

        # which can be converted to 64-bit integer
        print "$file\t", Math::BigInt->from_hex($mac->to_hex), "\n";
    }

DESCRIPTION

Many applications and programming language implementations were recently found to be vulnerable to denial-of-service attacks when a hash function with weak security guarantees, such as Murmurhash 3, was used to construct a hash table.

In order to address this, crypto_shorthash outputs short but unpredictable (without knowing the secret key) values suitable for picking a list in a hash table for a given key.

This function is optimized for short inputs.

The output of this function is only 64 bits. Therefore, it should not be considered collision-resistant.

Use cases:

  • Hash tables

  • Probabilistic data structures such as Bloom filters

  • Integrity checking in interactive protocols

METHODS

keygen

    my $key = $crypto_shorthash->keygen();

Helper method to generate a random key to be used by $crypto_shorthash.

The length of the $key equals "KEYBYTES".

NOTE: keep the key confidential.

Returns Data::BytesLocker object.

mac

    my $mac = $crypto_shorthash->mac( $msg, $key );

Computes the MAC of the $msg using given $key.

The length of the $mac equals "BYTES".

Returns Data::BytesLocker object.

CONSTANTS

KEYBYTES

    my $key_length = $crypto_shorthash->KEYBYTES;

Returns the length of key.

BYTES

    my $mac_length = $crypto_shorthash->BYTES;

Returns the length of MAC.

SECURITY MODEL

crypto_shorthash uses SipHash-2-4 pseudorandom hash optimized for speed on short messages.

SEE ALSO

AUTHOR

Alex J. G. Burzyński <ajgb@cpan.org>

COPYRIGHT AND LICENSE

This software is copyright (c) 2015 by Alex J. G. Burzyński <ajgb@cpan.org>.

This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.