NAME

Crypt::SKey - Perl S/Key calculator

SYNOPSIS

# In perl script:
use Crypt::SKey qw(compute);
$output = compute($sequence_num, $seed, $password);
@output = compute($sequence_num, $seed, $password, $count);

# Command line:
perl -MCrypt::SKey -e key 500 fo099804
perl -MCrypt::SKey -e key 500 fo099804 100

# The following shell alias may be useful:
alias key 'perl -MCrypt::SKey -e key'
# This allows you to simply type:
key 500 fo099804

DESCRIPTION

This module contains a simple S/Key calculator (as described in RFC 1760) implemented in Perl. It exports the function key by default, and may optionally export the function compute.

compute_md4, compute_md5, key_md4, and key_md5 are provided as convenience functions for selecting either MD4 or MD5 hashes. The default is MD4; this may be changed with with the $Crypt::SKey::HASH variable, assigning it the value of MD4 or MD5.

INSTALLATION

Follow the usual steps for installing any Perl module:

perl Makefile.PL
make test
make install

FUNCTIONS

compute($sequence_num, $seed, $password [, $count])

compute_md4($sequence_num, $seed, $password [, $count])

compute_md5($sequence_num, $seed, $password [, $count])

Given three arguments, computes the hash value and returns it as a string containing six words separated by spaces. If $count is specified and greater than one, returns a list of several such strings. The meanings of the arguments is as follows:

  • sequence_number

    Which output in the sequence of calculated S/Key responses to generate. This is called N in RFC 1760. It will usually be the first number shown in an S/Key challenge.

  • seed

    This is a random seed. It is usually the second number/string shown in an S/Key challenge.

  • password

    This is your secret password.

  • count

    This argument is optional and defaults to 1. It specifies the number of S/Key responses to generate. This may be useful if you want to pre-generate a bunch of responses and print them on a piece of paper so that you don't need to have an S/Key calculator around later.

key()

key_md4()

key_md5()

Acts just like the 'key' executable program that comes with the standard distribution of s/key. Reads several arguments from the command line (@ARGV), prompts for the user's password, and prints one or more calculated s/key responses to STDOUT. The command line arguments are, in order:

  • sequence_number

  • seed

  • count (optional)

Their meanings are exactly the same as with the compute function above.

NOTES

If you care about security, you'd probably be better off using SSH than S/Key, because SSH encrypts your entire session whereas S/Key only encrypts your password. I wrote this module because nobody else seemed to have done it yet, and because sometimes I'm on systems with neither SSH nor the key program, but I want to telnet to a system that offers S/Key password transmission.

The original key program takes the count parameter using the -n flag, but this version takes it as an optional final argument. Unless I hear from someone that needs the behavior changed, I'm not likely to add the -n flag.

I currently have no plans to write any code that checks the validity of S/Key responses at login, i.e. the code that the server has to run when authenticating users. It shouldn't be hard, though, and if someone wants to send me a patch implementing this functionality I'll be happy to add it.

AUTHOR

Ken Williams, ken@forum.swarthmore.edu

COPYRIGHT

Copyright 2000-2002 Ken Williams. All rights reserved.

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

SEE ALSO

perl(1). RFC 1760. Digest::MD4(1). Digest::MD5(1). Term::ReadKey(1).