System and method for providing masquerade protection in a computer network using hardware and timestamp-specific single use keys5717756Abstract An authentication session key is generated on a trusted machine based upon an identifier of its CPU, hardware configuration, and a timestamp. The trusting machine retrieves this same information about the trusted machine, and then generates session locks for the machine which are valid for a predetermined time interval. If the incoming session key matches one of the session locks, and the incoming session key is not on the list of used keys, the session key is appended to a list of keys which will no longer thereafter be valid, and access is then granted, thereby employing single-use keys. Because the locks and keys are also generated during a timestamp, a user may request service from the same machine multiple times by waiting no more than a predetermined time between requests, or front ends to the masquerade protection tools could be written that re-try until successful. Because the keys generated are specific to the hardware characteristics of the trusted machine upon which they are generated, attempts to gain access from an imposter machine will generate unusable session keys. Claims I claim: Description TECHNICAL FIELD
TABLE 1
__________________________________________________________________________
SEED 1 2 . . . 10,000,010 . . . . . . . . . . . . . . .
. . . . . .
* 0 * 1990395451
1950343301
1467107738
718222021
1194136672
* 1 * 2078917053
143302914
1753184651
920128997
1814331174
* 2 * 19955008
483746175
2039261564
1122035973
287042027
HW #1
* 845621309
* 877369427
1416513102
1393253895
1426614629
1195827568
HW #2
* 1205769438
* 990647142
1539379435
714551448
518764677
1027266981
HW #3
* 1973280456
* 269037359
1329309741
622836706
1113596869
1974420396
HW #4
* 2147483645
* 651088819
929013518
608876999
112501903
407294992
HW #5
* 2147483646
* 739610422
1269456779
894953912
314408069
1027489493
HW #6
* 2147483647
* 828132024
1609900040
1181030825
516315045
1647683995
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1232915785 623323901
992651780
1555095128
1491367866
150987678
460770759 254862619
108788686
1850510617
318963580
280583253
1836109381 2033884984
1372409240
2145926107
1294042941
410178829
819239759 325820421
1050195750
2096250483
1631292630
1138938711
1205211789 1296342674
35938096
1493649445
1244073863
155297983
75527097 196978441
310492116
1007202948
1805898726
1319031802
1401867215 654965925
1496757414
1742590483
1787355254
835942775
629722189 286504642
612894320
2038005973
614950967
965538351
2005060811 2065527008
1876514874
185937814
1590030329
1095133926
, . . . . . . . . . . . . 10,000,012
2079171784 135061501
8748332 926162679
85808529 1717263856
2136697018 2006998385
1197237743 1801108058
1683511884 232124393
774249370 982983441
851309567 1774084618
928369763 417702148
__________________________________________________________________________
Turning now to FIG. 7, a graphic picture is provided of the sequence of steps for arriving at the session key for complexity 1 (which is the session key), and the adjusted timestamp ("AT") and the corresponding "AT"'TH random results from random() utilized to generate a session key for complexities greater than 1. With respect to the TRUSTED machine, again it will be recalled that hardware specific information is utilized to determine which of the over 2 billion different pseudo random output streams (260 of FIG. 5 for example) will be employed in the initial part of the process. The confidential GCON and ACON constants it will be recalled affect how far down any pseudo random output stream the process goes to obtain a value. The "seed" 300 in FIG. 7 it will be recalled is the product of the CPU-ID*hardware.sub.-- checksum, and the timestamp will be recognized as the current time (conventionally the number of seconds past Jan. 1, 1970) /GCON+ACON, abbreviated in FIG. 7 as "TS", 302. Also, the abbreviation CMPLX in FIG. 7 will be recognized to be the familiar COMPLEXITY value constant. For a COMPLEXITY of 1,as previously noted, the ts' th random() result 304, in fact will be the session key. However, if more COMPLEXITY and thus security is desired, for complexities greater than 1, an adjusted timestamp "AT", 306, is formulated, which is the previously described remainder of (timestamp-5)/10000. The seeds 308 are utilized for the downward random() streams, and the results of calling random() corresponding to the "AT" adjusted time (shown, generically, as "ZZZZZ" are the "AT"'TH random results from calling random() after seeding the random number generator with each seed and are used to generate the session keys. Referring to the SECURE machine now, for a COMPLEXITY of 1,Table 2 shows the 11 calls to random() which could match the session key described with reference to FIG. 7, generated by the TRUSTED machine if the clocks are in the same +/-5GCON range. Again, as per FIG. 7, the timestamp previously described is abbreviated as "TS" and the seed is the value from the table accessible by the secure machine which matches the IP address of the most recent inbound network connection.
TABLE 2
______________________________________
0 srandom (seed)
1 random ( )
2 random ( )
. . .
. . .
ts-5 random ( ) could match session key
ts-4 random ( ) could match session key
ts-3 random ( ) could match session key
ts-2 random ( ) could match session key
ts-1 random ( ) could match session key
ts random ( ) could match session key
ts+1 random ( ) could match session key
ts+2 random ( ) could match session key
ts+3 random ( ) could match session key
ts+4 random ( ) could match session key
ts+5 random ( ) could match session key
______________________________________
For the SECURE machine in the case of a designated complexity greater than 1,FIG. 8 provides a graphical illustration of the conditions under which session keys could be matched and further shows that session keys for different time ranges share none of the same building blocks. In FIG. 8, "TC" refers to the clock time of the TRUSTED machine and "SC" refers to the clock time of the SECURE machine. From FIG. 8, it will be noted that if the clocks of the SECURE and TRUSTED machines are in the same GCON seconds range, then FFFFF will be the building blocks for both session keys. However, if the clocks are skewed within a predetermined range, the incoming session key will have been built by one of the following sets of building blocks: AAAAA, BBBBB, CCCCC, DDDDD, EEEEE, GGGGG, HHHHH, IIIII, JJJJJ, or KKKKK. Finally, in order to better understand the invention, an actual example will be hereinafter provided of a user attempting to rlogin from a machine "crayon" to another machine "S410victim" employing masquerade protection. In the example, an illustration will first be provided wherein session keys do not match and access is denied, followed by a similar example wherein the keys match and access is granted. First, in accordance with the prior description, a masquerade-protected front end to rlogin will first detect that the S410victim is listed in the etc/hosts. SECURE file, whereupon it collects the previously described CPU-id and checksum of the configuration of the machine currently executing the front end. In the example, the CPU-id will (arbitrarily) be assumed to be 193,and the checksum of LSCFG-V will assumed to be 625. The front end, upon multiplying these numbers together, obtains a seed value of 120625 which obviously will be hardware-specific. The front end thereafter calls the routine gettimeofday() in order to determine how many seconds have passed since midnight, Jan. 1, 1970. In the example which follows, this function was called on Tuesday, Jun. 27th at 10:35 a.m. CDT, 1995. The "seconds" value returned by this call to gettimeofday is then divided as previously described by the constant GCON and added to the constant ACON (both, it will be recalled being secret to all "crayon" machine users except for the root user). This is done in order to obtain a value for the "timestamp" variable which depends not only on the date and time, but also the secret values of GCON and ACON previously decided upon by the crayon machine's administrator. The results will be as follows: gettimeofday() returned 804267329 gettimeofday return .div.GCON of 37 results in 21736954 ACON of -21473251 is added to the dividend to obtain a timestamp value of 263703 The front end to rlogin will then call srandom(120625) (where 120625 is the hardware-dependent first seed value described above) in order to seed the random number generator. The random() function is then called "timestamp-2" times, discarding the results generated therefrom which are shown as follows in Table 3:
TABLE 3
______________________________________
HERE
______________________________________
result from random ( ) call
1 was 472515509
result from random ( ) call
2 was 1588900722
result from random ( ) call
3 was 915019139
result from random ( ) call
4 was 1760430670
result from random ( ) call
5 was 519503375
result from random ( ) call
6 was 556921145
result from random ( ) call
7 was 1823984006
result from random ( ) call
8 was 1347300635
result from random ( ) call
9 was 500795931
result from random ( ) call
10 was 702644326
result from random ( ) call
11 was 769281827
result from random ( ) call
12 was 887862883
result from random ( ) call
13 was 1851855625
result from random ( ) call
14 was 1292778304
result from random ( ) call
15 was 1423281335
. . . . 263,679 lines of random numbers deleted . . .
result from random ( ) call
263695 was
690517059
result from random ( ) call
263696 was
2005013007
result from random ( ) call
263697 was
518838856
result from random ( ) call
263698 was
683953746
result from random ( ) call
263699 was
2009848507
result from random ( ) call
263700 was
535088599
result from random ( ) call
263701 was
729576118
______________________________________
Random() is then called COMPLEXITY times (having a value of 4 in this example and known only to crayon's system administrator), with the results being retained as seeds as shown in Table 4:
TABLE 4
__________________________________________________________________________
result from random ( )
call 263702 was
109512711
Assign to seed ›1!
result from random ( )
call 263703 was
877852427
Assign to seed ›2!
result from random ( )
call 263704 was
292077057
Assign to seed ›3!
result from random ( )
call 263705 was
761158949
Assign to seed ›4!
__________________________________________________________________________
Next, after dividing the timestamp value of 263703 by 10000,the remainder thereof, which is 3703,is utilized wherein random() is called 3703 times in order to generate fragments of session.sub.-- key (wherein session.sub.-- key is initialized to null). The results are shown in Table 5 resulting in the session.sub.-- key shown at the end of the table. The front end to rlogin then prepends the TERM variable, which was "aixterm" with the session key shown at the bottom of Table 5 in order to create a new TERM variable of session.sub.-- key:aixterm.
TABLE 5
__________________________________________________________________________
seed ›1! = 109512711
result from random ( )
call 1 was 1111472844
result from random ( )
call 2 was 1211763696
result from random ( )
call 3 was 1405547944
result from random ( )
call 4 was 191533680
result from random ( )
call 5 was 1853352561
. . . . 3,679 lines of random numbers deleted . . .
result from random ( )
call 3700 was 1701522600
result from random ( )
call 3701 was 3363489348
result from random ( )
call 3702 was 151550372
result from random ( )
call 3703 was 139933611
139933611 / 2.147483648 is (key fragment) 65161667
after appending fragment, session.sub.-- key is 65161667
seed ›2! = 877852427
result from random ( )
call 1 was 23395926
result from random ( )
call 2 was 2134425828
result from random ( )
call 3 was 1092895110
result from random ( )
call 4 was 81559868
result from random ( )
call 5 was 1299968701
. . . . 3,679 lines of random numbers deleted . . .
result from random ( )
call 3700 was 19949398
result from random ( )
call 3701 was 1982066460
result from random ( )
call 3702 was 605740292
result from random ( )
call 3703 was 911460651
911460651 / 2.147483648 is (key fragment) 424431949
after appending fragment, session.sub.-- key is 65161667424431949
seed ›3! = 292077057
result from random ( )
call 1 was 1385733309
result from random ( )
call 2 was 53438210
result from random ( )
call 3 was 93864347
result from random ( )
call 4 was 1957755326
result from random ( )
call 5 was 1339349887
. . . . 3,679 lines of random numbers deleted . . .
result from random ( )
call 3700 was 1007066211
result from random ( )
call 3701 was 673137672
result from random ( )
call 3702 was 1591210132
result from random ( )
call 3703 was 86314347
86314347 / 2.147483648 is (key fragment) 40193248
after appending fragment, session.sub.-- key is 6516166742443194940193248
seed ›4! = 761158949
result from random ( )
call 1 was 912623767
result from random ( )
call 2 was 836836246
result from random ( )
call 3 was 1995051113
result from random ( )
call 4 was 795444970
result from random ( )
call 5 was 1863667243
. . . . 3,679 lines of random numbers deleted . . .
result from random ( )
call 3700 was 527380609
result from random ( )
call 3701 was 1670683728
result from random ( )
call 3702 was 1059892980
result from random ( )
call 3703 was 1476078315
1476078315 / 2.147483648 is (key fragment) 687352538
after appending fragment, session.sub.-- key is 65161667424431949401932486
87352538
session.sub.-- key is: 6516166742443194940193248687352538
__________________________________________________________________________
Then the normal (e.g., original) rlogin command is utilized, which transfers the terminal type as part of its normal operation, in order to connect to the S410victim as follows: crayon.sub.-- rlogin.fwdarw.(standard rlogin interface).fwdarw.s410 victim.sub.-- login On the S410victim machine, a masquerade-protected version of the "login" function reads the terminal type passed in from the crayon machine, and splits it at the colon, in order to read the incoming <session key> shown in Table 5. The terminal type is then set to its original value of "aixterm". The S410victim machine uses the "netstat" in order to view the IP address of the machine which has most recently started a connection over the network (in the example 129.35.128.113). It also utilizes the "host" command to convert it to a hostname: crayon.austin.ibm.com. The machine then will look up this hostname "crayon.austin.ibm.com" in the etc/security/masqprot.list table in which the following line will be located: crayon.austin.ibm.com is 129.35.128.113 4 120625 37 -21473251 From this line, the S410victim machine may determine the crayon's constants, namely
______________________________________
COMPLEXITY value:
4
seed value: 120625
GCON value: 37
ACON value: -21473251
______________________________________
The "login front end" then calls the gettimeofday() function to determine how many seconds have passed since midnight, Jan. 1, 1970. It then begins calculating what the incoming session key should be for multiple times centered around the present time, stopping if the incoming key matches the current calculated key. It will be recalled that the "valid time range" concept is necessary to compensate for clock skew and/or clock drift between system clocks on the two machines. The predetermined number of multiple times is shown as follows in Table 6:
TABLE 6
______________________________________
now - (5* GCON) seconds,
now - (4* GCON) seconds,
now - (3* GCON) seconds,
now - (2* GCON) seconds,
now - ( GCON) seconds,
now,
now + ( GCON) seconds,
now + (2* GCON) seconds,
now + (3* GCON) seconds,
now + (4* GCON) seconds, and
now + (5* GCON) seconds.
______________________________________
If it is assumed that the gettimeofday() function returned a function 804267298,then this result divided by the GCON constant of 37 yields 21736954. Adding the ACON value of -21473251 to this result yields a timestamp value of 263703. The srandom(120625) function will then be called to seed the random number generator.
TABLE 7
______________________________________
result from random( ) call
1 was 472515509
result from random( ) call
2 was 1588900722
result from random( ) call
3 was 915019139
result from random( ) call
4 was 1760430670
result from random( ) call
5 was 519503375
result from random( ) call
6 was 556921145
result from random( ) call
7 was 1823984006
result from random( ) call
8 was 1347300635
result from random( ) call
9 was 500795831
result from random( ) call
10 was 702644326
result from random( ) call
11 was 769281827
result from random( ) call
12 was 887862883
result from random( ) call
13 was 1851855625
result from random( ) call
14 was 1292778304
result from random( ) call
15 was 1423281335
. . . 263,679 lines of random numbers deleted . . .
result from random( ) call
263695 was 690517059
result from random( ) call
263696 was 2005013007
then call random( ) (11+COMPLEXITY) times, saving the results as
seeds.
Will use:
seeds 0, 1, 2, and 3 to create session key check for now-(5*GCON)
seconds,
seeds 1, 2, 3, and 4 to create session key check for now-(4*GCON)
seconds,
seeds 2, 3, 4, and 5 to create session key check for now-(3*GCON)
seconds,
seeds 3, 4, 5, and 6 to create session key check for now-(2*GCON)
seconds,
seeds 4, 5, 6, and 7 to create session key check for now-( GCON)
seconds,
seeds 5, 6, 7, and 8 to create session key check for now,
seeds 6, 7, 8, and 9 to create session key check for now+( GCON)
seconds,
seeds 7, 8, 9, and 10 to create session key check for now+(2*GCON)
seconds,
seeds 8, 9, 10, and 11 to create session key check for now+(3*GCON)
seconds,
seeds 9, 10, 11, and 12 to create session key check for now+(4*GCON)
seconds,
seeds 10, 11, 12, and 13 to create session key check for now+(5*GCON)
seconds,
result from random( ) call 263697 was 518838856 Assign to seed›0!
result from random( ) call 263698 was 683953746 Assign to seed›1!
result from random( ) call 263699 was 2009848507 Assign to seed›2!
result from random( ) call 263700 was 535088599 Assign to seed›3!
result from random( ) call 263701 was 729576118 Assign to seed›4!
result from random( ) call 263702 was 109512711 Assign to seed›5!
result from random( ) call 263703 was 877852427 Assign to seed›6!
result from random( ) call 263704 was 292077057 Assign to seed›7!
result from random( ) call 263705 was 761158949 Assign to seed›8!
result from random( ) call 263706 was 898090332 Assian to seed›9!
result from random( ) call 263707 was 1328262702 Assign to seed›10!
result from random( ) call 263708 was 1700051705 Assigm to seed›11!
result from random( ) call 263709 was 1049723143 Assign to seed›12!
result from random( ) call 263710 was 1977441982 Assign to seed›13!
result from random( ) call 263711 was 360217799 Assign to
______________________________________
seed›14!
With a timestamp of 263703,the remainder of timestamp after being divided by 10000 is 3703. The session.sub.-- key is then initialized to null, and different length random() strings are utilized for each session key. For a session.sub.-- key # of 0,wherein the timestamp is 63703,this timestamp -5 is 263698 which, after adding the aforementioned session key # of 0,still results in 63698. The remainder of this 263698 value, after dividing by 10000 is 3698. This value of 3698 is then used in order to call random() 3698 times in order to generate fragments of session--key ›0! as shown in Table 8:
TABLE 8
__________________________________________________________________________
seed ›0! = 518838856
result from random ( )
call 1 was 1434641391
result from random ( )
call 2 was 1785492909
result from random ( )
call 3 was 247519584
result from random ( )
call 4 was 430401955
result from random ( )
call 5 was 302823428
. . . . 3,679 lines of random numbers deleted . . .
result from random ( )
call 3695 was 688574576
result from random ( )
call 3696 was 1592424908
result from random ( )
call 3697 was 314425712
result from random ( )
call 3698 was 476900761
476900761 / 2.147483648 is (key fragment) 222074225
after appending fragment, session.sub.-- key is 222074225
seed ›1! = 683953746
result from random ( )
call 1 was 676780296
result from random ( )
call 2 was 579575439
result from random ( )
call 3 was 16909259
result from random ( )
call 4 was 997224993
result from random ( )
call 5 was 733048898
. . . . 3,679 lines of random numbers deleted . . .
result from random ( )
call 3695 was 1597753697
result from random ( )
call 3696 was 1724422159
result from random ( )
call 3697 was 1902719308
result from random ( )
call 3698 was 1597503509
1597503509 / 2.147483648 is (key fragment) 743895530
after appending fragment, session.sub.-- key is 222074225743895530
seed ›2! = 2009848507
result from random ( )
call 1 was 1727438734
result from random ( )
call 2 was 753135060
result from random ( )
call 3 was 1692929070
result from random ( )
call 4 was 532384076
result from random ( )
call 5 was 2057764045
. . . . 3,679 lines of random numbers deleted . . .
result from random ( )
call 3695 was 1606094916
result from random ( )
call 3696 was 2048751823
result from random ( )
call 3697 was 1560585170
result from random ( )
call 3698 was 818799147
818799147 / 2.147483648 is (key fragment) 381283074
after appending fragment, session.sub.-- key is 22207422574389553038128307
seed ›3! = 535088599
result from random ( )
call 1 was 1458307412
result from random ( )
call 2 was 1837081216
result from random ( )
call 3 was 1719654976
result from random ( )
call 4 was 2083499744
result from random ( )
call 5 was 428909089
. . . . 3,679 lines of random numbers deleted . . .
result from random ( )
call 3695 was 42425754
result from random ( )
call 3696 was 1625346673
result from random ( )
call 3697 was 573973050
result from random ( )
call 3698 was 1800572499
1800572499 / 2.147483648 is (key fragment) 838456928
after appending fragment, session.sub.-- key is 22207422574389553038128307
4838456928
session.sub.-- key ›0! : 222074225743895530381283074838456928
does not match: 6516166742443194940193248687352538 the incoming
__________________________________________________________________________
key.
As also shown at the end of Table 8,the session--key ›O! does not match the incoming key. Again, the session.sub.-- key is initialized to null, and different length random() streams are utilized for each session key, with the session key # now being 1. Similarly to previously, with a timestamp of 263703, this value -5 is 263698,which after adding the session key "1" becomes 263699. The remainder of 263699,after dividing by 10000 is 3699. The random() function is then called 3699 times in order to generate fragments for session.sub.-- key›1! as shown in Table 9:
TABLE 9
__________________________________________________________________________
seed ›1! = 683953746
result from random ( )
call 1 was 676780296
result from random ( )
call 2 was 579575439
result from random ( )
call 3 was 16909259
result from random ( )
call 4 was 997224993
result from random ( )
call 5 was 733048898
. . . . 3,679 lines of random numbers deleted . . .
result from random ( )
call 3696 was 1724422159
result from random ( )
call 3697 was 1902719308
result from random ( )
call 3698 was 1597503509
result from random ( )
call 3699 was 812713069
812713069 / 2.147483648 is (key fragment) 378449022
after appending fragment, session.sub.-- key is 378449022
seed ›2! = 2009848507
result from random ( )
call 1 was 1727438734
result from random ( )
call 2 was 753135060
result from random ( )
call 3 was 1692929070
result from random ( )
call 4 was 532384076
result from random ( )
call 5 was 2057764045
. . . . 3,679 lines of random numbers deleted . . .
result from random ( )
call 3696 was 2048751823
result from random ( )
call 3697 was 1560585170
result from random ( )
call 3698 was 818799147
result from random ( )
call 3699 was 841898830
841898830 / 2.147483648 is (key fragment) 392039686
after appending fragment, session.sub.-- key is 378449022392039686
seed ›3! = 535088599
result from random ( )
call 1 was 1458307412
result from random ( )
call 2 was 1837081216
result from random ( )
call 3 was 1719654976
result from random ( )
call 4 was 2083499744
result from random ( )
call 5 was 428709089
. . . . 3,679 lines of random numbers deleted . . .
result from random ( )
call 3696 was 1625346673
result from random ( )
call 3697 was 573973050
result from random ( )
call 3698 was 1800572499
result from random ( )
call 3699 was 276142892
276142892 / 2.147483648 is (key fragment) 128589048
after appending fragment, session.sub.-- key is 37844902239203968612858904
seed ›4! = 729576118
result from random ( )
call 1 was 1965191682
result from random ( )
call 2 was 1722311523
result from random ( )
call 3 was 1326087673
result from random ( )
call 4 was 689429261
result from random ( )
call 5 was 1464874670
. . . . 3,679 lines of random numbers deleted . . .
result from random ( )
call 3696 was 1007954093
result from random ( )
call 3697 was 958461924
result from random ( )
call 3698 was 125929709
result from random ( )
call 3699 was 2002160207
2002160207 / 2.147483648 is (key fragment) 932328522
after appending fragment, session.sub.-- key is 37884490223920396861285888
9000048932328522
session.sub.-- key ›1! : 378449022392039686128589048932328522
does not match: 6516166742443194940193248687352538 the incoming
__________________________________________________________________________
key
Again, at the end of Table 9,the session.sub.-- key ›1! does not match the incoming key. Continuing with the example, with a remainder of 3700,calling random() 3700 times, to generate fragments of session.sub.-- key›2!, as shown in Table 10,results in the session.sub.-- key›2! which does not match the incoming key. Similarly, calling random() 3700 times to generate fragments of session.sub.-- key›3! results in the session.sub.-- key ›3! in the manner shown in Table 11 which also does not match the incoming key.
TABLE 10
__________________________________________________________________________
seed ›2! = 2009848507
result from random ( )
call 1 was 1727438734
result from random ( )
call 2 was 753135060
result from random ( )
call 3 was 1692929070
result from random ( )
call 4 was 532384076
result from random ( )
call 5 was 2057764045
. . . . 3,679 lines of random numbers deleted . . .
result from random ( )
call 3697 was 1560585170
result from random ( )
call 3698 was 818799147
result from random ( )
call 3699 was 841898830
result from random ( )
call 3700 was 757516734
757516734 / 2.147483648 is (key fragment) 352746218
after appending fragment, session.sub.-- key is 352746218
seed ›3! = 535088599
result from random ( )
call 1 was 1458307412
result from random ( )
call 2 was 1837081216
result from random ( )
call 3 was 1719654976
result from random ( )
call 4 was 2083499744
result from random ( )
call 5 was 428709089
. . . . 3,679 lines of random numbers deleted . . .
result from random ( )
call 3697 was 573973050
result from random ( )
call 3698 was 1800572499
result from random ( )
call 3699 was 276142892
result from random ( )
call 3700 was 1746184064
1746184064 / 2.147483648 is (key fragment) 813130319
after appending fragment, session.sub.-- key is 352746218813130319
seed ›4! = 729576118
result from random ( )
call 1 was 1965191682
result from random ( )
call 2 was 1722311523
result from random ( )
call 3 was 1326087673
result from random ( )
call 4 was 689429261
result from random ( )
call 5 was 1464874670
. . . . 3,679 lines of random numbers deleted . . .
result from random ( )
call 3697 was 958461924
result from random ( )
call 3698 was 125929709
result from random ( )
call 3699 was 2002160207
result from random ( )
call 3700 was 2128166917
2128166917 / 2.147483648 is (key fragment) 991004943
after appending fragment, session.sub.-- key is 35274621881313031999100494
seed ›5! = 109512711
result from random ( )
call 1 was 1111472844
result from random ( )
call 2 was 1211763696
result from random ( )
call 3 was 1405547944
result from random ( )
call 4 was 191533680
result from random ( )
call 5 was 1853352561
. . . . 3,679 lines of random numbers deleted . . .
result from random ( )
call 3697 was 208480858
result from random ( )
call 3698 was 1813571955
result from random ( )
call 3699 was 1705903748
result from random ( )
call 3700 was 1701522600
1701522600 / 2.147483648 is (key fragment) 792333185
after appending fragment, session.sub.-- key is 35274621881313031999100494
3792333185
session.sub.-- key ›2! : 352746218813130319991004943792333185
does not match: 6516166742443194940193248687352538 the incoming
__________________________________________________________________________
key.
With a remainder of 3701 and a call random(3701) results in session.sub.-- key›3! which does not match the incoming key as shown in Table 11:
TABLE 11
__________________________________________________________________________
seed ›3! = 535088599
result from random ( )
call 1 was 1458307412
result from random ( )
call 2 was 1837081216
result from random ( )
call 3 was 1719654976
result from random ( )
call 4 was 2083499744
result from random ( )
call 5 was 428709089
. . . . 3,679 lines of random numbers deleted . . .
result from random ( )
call 3968 was 1800572499
result from random ( )
call 3699 was 276142892
result from random ( )
call 3700 was 1746184064
result from random ( )
call 3701 was 1104894644
1104894644 / 2.147483648 is (key fragment) 514506638
after appending fragment, session.sub.-- key is 514506638
seed ›4! = 729576118
result from random ( )
call 1 was 1965191682
result from random ( )
call 2 was 1722311523
result from random ( )
call 3 was 1326087673
result from random ( )
call 4 was 689429261
result from random ( )
call 5 was 1464874670
. . . . 3,679 lines of random numbers deleted . . .
result from random ( )
call 3698 was 125929709
result from random ( )
call 3699 was 2002160207
result from random ( )
call 3700 was 2128166917
result from random ( )
call 3701 was 1964392946
1964392946 / 2.147483648 is (key fragment) 914741754
after appending fragment, session.sub.-- key is 514506638914741754
seed ›5! = 109512711
result from random ( )
call 1 was 1111472844
result from random ( )
call 2 was 1211763696
result from random ( )
call 3 was 1405547944
result from random ( )
call 4 was 191533680
result from random ( )
call 5 was 1853352561
. . . . 3,679 lines of random numbers deleted . . .
result from random ( )
call 3698 was 1813571955
result from random ( )
call 3699 was 1705903748
result from random ( )
call 3700 was 1701522600
result from random ( )
call 3701 was 336348948
336348948 / 2.147483648 is (key fragment) 156624689
after appending fragment, session.sub.-- key is 51450663891474175415662468
result from random ( )
call 3698 was 1813571955
result from random ( )
call 3699 was 1705903748
result from random ( )
call 3700 was 1701522600
result from random ( )
call 3701 was 336348948
336348948 / 2.147483648 is (key fragment) 156624689
after appending fragment, session.sub.-- key is 51450663891474175415662469
89
seed ›6! = 877852427
result from random ( )
call 1 was 23395926
result from random ( )
call 2 was 2134425828
result from random ( )
call 2 was 1092895110
result from random ( )
call 4 was 81559868
result from random ( )
call 5 was 1299968701
. . . . 3,679 lines of random numbers deleted . . .
result from random ( )
call 2698 was 1902157323
result from random ( )
call 3699 was 2134640950
result from random ( )
call 3700 was 199493398
result from random ( )
call 3710 was 1982066460
1982066460 / 2.147483648 is (key fragment) 9229712606
after appending fragment, session.sub.-- key is 51450663891474175415662468
9922971606
session.sub.-- key ›3! : 514506638914741754156624689922971606
does not match: 65161667424431994940193248687352538 the incoming
__________________________________________________________________________
key.
Continuing this process with a call to random() 3702 times, results in session.sub.-- key ›4! which does not match the incoming key, as shown in Table 12:
TABLE 12
__________________________________________________________________________
seed ›4! = 729576118
result from random ( )
call 1 was 1965191682
result from random ( )
call 2 was 1722311523
result from random ( )
call 3 was 1326087673
result from random ( )
call 4 was 689429261
result from random ( )
call 5 was 1464874670
. . . . 3,679 lines of random numbers deleted . . .
result from random ( )
call 3699 was 2002160207
result from random ( )
call 3700 was 2128166917
result from random ( )
call 3701 was 1964392946
result from random ( )
call 3702 was 1028288332
1028288332 / 2.147483648 is (key fragment) 478834062
after appending fragment, session.sub.-- key is 478834062
seed ›5! = 109512711
result from random ( )
call 1 was 1111472844
result from random ( )
call 2 was 1211763696
result from random ( )
call 3 was 1405547944
result from random ( )
call 4 was 191533680
result from random ( )
call 5 was 1853352561
. . . . 3,679 lines of random numbers deleted . . .
result from random ( )
call 3699 was 1705903748
result from random ( )
call 3700 was 1701522600
result from random ( )
call 3701 was 336348948
result from random ( )
call 3702 was 151550372
151550372 / 2.147483648 is (key fragment) 70571139
after appending fragment, session.sub.-- key is 47883406270571139
seed ›6! = 877852427
result from random ( )
call 1 was 23395926
result from random ( )
call 2 was 2134425828
result from random ( )
call 3 was 1092895110
result from random ( )
call 4 was 81559868
result from random ( )
call 5 was 1299968701
. . . . 3,679 lines of random numbers deleted . . .
result from random ( )
call 3699 was 2134640950
result from random ( )
call 3700 was 19949398
result from random ( )
call 3701 was 1982066460
result from random ( )
call 3702 was 605740292
605740292 / 2.147483648 is (key fragment) 282069802
after appending fragment, session.sub.-- key is 47883406270571139282069802
seed ›7! = 292077057
result from random ( )
call 1 was 1385733309
result from random ( )
call 2 was 53438210
result from random ( )
call 3 was 93864347
result from random ( )
call 4 was 1957755326
result from random ( )
call 5 was 1339349887
. . . . 3,679 lines of random numbers deleted . . .
result from random ( )
call 3699 was 1067583161
result from random ( )
call 3700 was 1007066211
result from random ( )
call 3701 was 673137672
result from random ( )
call 3702 was 1591210132
1591210132 / 2.147483648 is (key fragment) 740964949
after appending fragment, session.sub.-- key is 47883406270571139282069802
740964949
session.sub.-- key ›4! : 47883406270571139282069802740964949
does not match: 6516166742443194940193248687352538 the incoming
__________________________________________________________________________
key.
However, with respect to Table 13,calling random() 3703 times generates a session.sub.-- key ›5! which, as desired, finally matches the incoming key.
TABLE 13
__________________________________________________________________________
seed ›5! = 109512711
result from random ( )
call 1 was 1111472844
result from random ( )
call 2 was 1211763696
result from random ( )
call 3 was 1405547944
result from random ( )
call 4 was 191533680
result from random ( )
call 5 was 1853352561
. . . . 3,679 lines of random numbers deleted . . .
result from random ( )
call 3700 was 1701522600
result from random ( )
call 3701 was 336348948
result from random ( )
call 3702 was 151550372
result from random ( )
call 3703 was 139933611
139933611 / 2.147483648 is (key fragment) 65161667
after appending fragment, session.sub.-- key is 65161667
seed ›6! = 877852427
result from random ( )
call 1 was 23395926
result from random ( )
call 2 was 2134425828
result from random ( )
call 3 was 1092895110
result from random ( )
call 4 was 81559868
result from random ( )
call 5 was 1299968701
. . . . 3,679 lines of random numbers deleted . . .
result from random ( )
call 3700 was 19949398
result from random ( )
call 3701 was 1982066460
result from random ( )
call 3702 was 605740292
result from random ( )
call 3703 was 911460651
911460651 / 2.147483648 is (key fragment) 424431949
after appending fragment, session.sub.-- key is 65161667424431949
seed ›7! = 292077057
result from random ( )
call 1 was 1385733309
result from random ( )
call 2 was 53438210
result from random ( )
call 3 was 93864347
result from random ( )
call 4 was 1957755326
result from random ( )
call 5 was 1339349887
. . . . 3,679 lines of random numbers deleted . . .
result from random ( )
call 3700 was 1007066211
result from random ( )
call 3701 was 673137672
result from random ( )
call 3702 was 1591210132
result from random ( )
call 3703 was 86314347
86314347 / 2.147483648 is (key fragment) 40193248
after appending fragment, session.sub.-- key is 6516166742443194940193248
seed ›8! = 761158949
result from random ( )
call 1 was 912623767
result from random ( )
call 2 was 836836246
result from random ( )
call 3 was 1995051113
result from random ( )
call 4 was 795444970
result from random ( )
call 5 was 1863667243
. . . . 3,679 lines of random numbers deleted . . .
result from random ( )
call 3700 was 527380609
result from random ( )
call 3701 was 1670683728
result from random ( )
call 3702 was 1059892980
result from random ( )
call 3703 was 1476078315
1476078315 / 2.147483648 is (key fragment) 687352538
after appending fragment, session.sub.-- key is 65161667424431949401932486
87352538
session.sub.-- key ›5! : 6516166742443194940193248687352538
EXACTLY MATCHES: 6516166742443194940193248687352538 the incoming
__________________________________________________________________________
keyl
Next, the S410victim machine will scan the /var/tmp/masqkeys file to see if the resulting key from Table 13 has been used before. If it has been, the S410victim machine would deny access. However, this check of the file indicates the key has not yet been utilized. Accordingly, the S410victim machine will then append this key and a timestamp to/var/tmp/masqkeys.used as follows: 651616666742443194940193248687352538 Tue.sub.-- Jun.sub.-- 27.sub.-- 10:35:20.sub.-- CDT.sub.-- 1995, and thereafter grants the desired access. While the invention has been shown and described with reference to particular embodiments thereof, it will be understood by those skilled in the art that the foregoing and other changes in form and detail may be made therein without departing from the spirit and scope of the invention.
|
Same subclass Same class Consider this | ||||||||||
