Claims
- 1. A method, comprising:
communicating information about a computational puzzle to at least one of a plurality of computers, wherein the plurality of computers have a range of processing power and cache sizes, and wherein the computational puzzle has a solution that takes approximately the same amount of time on the plurality of computers; and causing the at least one computer to solve the puzzle in a manner whereby the at least one computer incurs a computational cost within a predetermined range.
- 2. A method as recited in claim 1, wherein said computational puzzle has a solution that is best found by a computation whose speed is limited by memory latency.
- 3. A method as recited in claim 2, wherein the solution of the puzzle causes the at least one computer to access a hard-to-predict sequence of locations in a memory array.
- 4. A method as recited in claim 3, wherein the memory array is significantly larger than the largest cache generally available to the plurality of computers.
- 5. A method as recited in claim 3, wherein the memory array to be accessed by the at least one computer has 2n entries, where n is an integer, and the computational puzzle comprises a function F( ) whose domain and range are integers in the range 0 . . . 2n−1, wherein F( ) is characterized in that its inverse F−1( ) cannot be evaluated in less time than a memory access.
- 6. A method as recited in claim 3, wherein said method is implemented as follows:
(1) let k and n be integers and F( ) a function whose domain and range are integers in the range 0 . . . (2n−1); (2) pick an integer x0 in 0 . . . (2n−1), and for i ε 0 . . . (k−1), computexl+1=F(xl) xor iand a checksum of the sequence x0, . . . , xk; (3) send at least some bits of xk and the checksum to the at least one computer; and (4) require the at least one computer to use this information to find x0.
- 7. A method as recited in claim 2, further comprising using the computational puzzle for preventing abuse of a resource on a computer network.
- 8. A method as recited in claim 7, comprising:
receiving a request for access to said resource from a client; and requiring said client to show that it has computed a solution to the computational puzzle before providing access to said resource.
- 9. method as recited in claim 8, wherein said resource comprises an e-mail delivery service, and said request for access to said resource comprises a request for delivery of an e-mail message.
- 10. A method as recited in claim 8, wherein said resource comprises an account creation service, and said request for access to said resource comprises a request for creation of a new account.
- 11. A method as recited in claim 8, wherein said resource comprises an index service, and said request for access to said resource comprises a request for the addition of a uniform resource locator (URL) to said index service.
- 12. A method as recited in claim 8, wherein said resource comprises a directory service, and said request for access to said resource comprises a request for the addition of a uniform resource locator (URL) to said directory service.
- 13. A method as recited in claim 8, wherein said resource comprises a web server, and said request for access to said resource comprises a request for information from said web server.
- 14. A method as recited in claim 8, wherein said resource comprises a network server, and said request for access to said resource comprises a request for the creation of a network connection with said network server.
- 15. A method as recited in claim 1, wherein said computational puzzle depends upon a password, and said solution is used as an extension to the password.
- 16. A method as recited in claim 15, wherein the method comprises the following steps:
first and second computers share a password p; the second computer, to supplement p, picks a password extension Q; the second computer poses a puzzle with solution Q, wherein the puzzle is such that the first computer can solve it with moderate effort by using p but such that Q is hard to find without p; and the first computer solves the puzzle.
- 17. A method as recited in claim 16, wherein the method is further characterized by the following steps:
the second computer derives a function F( ) from the password p, chooses the password extension Q, and lets a first number x0 be Q; the second computer computes a second number xk by evaluating F( ) k times with the recurrence xi+1=F(x1) xor i; the second computer finds a third number x′0 that also maps to xk using the recurrence; the second computer gives to the first computer a checksum of the path from x0 to xk, and x′0; and using p, the first computer derives F( ), builds a table for F−1( ), computes xk, then uses xk and the table to find x0, which is then used as the password extension Q.
- 18. A method as recited in claim 16, wherein the method is further characterized by the following steps:
the first and second computers derive a function F( ) from at least the password p, and both build a table for F−1( ); the first and second computers choose random values (xS and xR, respectively); the first and second computers exchange the random values, and let x0=(xS xor xR); the first and second computers compute xk by evaluating F( ) k times, with the recurrence: xi +1=F(x1) xor i.
- 19. A method as recited in claim 16, wherein the first computer finds Q by computing a memory bound function.
- 20. A method as recited in claim 19, wherein the first computer uses p and Q to access password-protected information.
- 21. A method as recited in claim 19, wherein the first computer uses p and Q to decrypt files that the second computer has previously encrypted.
- 22. A method for preventing abuse of a resource on a computer network, comprising:
receiving a request for access to said resource from a client; and requiring said client to show that it has computed a predefined memory-bound function before providing access to said resource.
- 23. A method as recited in claim 22, wherein said memory-bound function comprises an algorithm that causes said client, in computing said function, to access locations in a region of memory in a random or pseudo-random way.
- 24. A method as recited in claim 23, wherein the size of said region of memory to be accessed by said client is significantly larger than the size of the largest cache of any computer on which the method might be implemented.
- 25. A method as recited in claim 23, wherein said algorithm prescribes a computation on a large data structure, thus forcing said client to perform memory accesses across said region of memory.
- 26. A method as recited in claim 23, wherein said algorithm causes said client to compute an inverse function F31 1( ) of a function F( ), wherein F( ) is a function whose domain and range are integers in the range 0 . . . (2n−1), where 2n is the number of entries in said memory; and wherein F−1( ) cannot be evaluated in less time than a memory access, such that said client is benefited by building a memory-based lookup table for F−1( ).
- 27. A method as recited in claim 26, wherein said method is implemented as follows:
(1) let k and n be integers and F( ) a function whose domain and range are integers in the range 0 . . . (2n−1); (2) pick an integer x0 in 0 . . . (2n−1), and for i ε 0 . . . (k−1), computexl+1=F(x1) xor iand a checksum of the sequence x0, . . . , xk; (3) send at least some bits of xk and the checksum to said client; and (4) require said client to use this information to find x0.
- 28. A method as recited in claim 22, wherein said resource comprises an e-mail delivery service, and said request for access to said resource comprises a request for delivery of an e-mail message.
- 29. A method as recited in claim 22, wherein said resource comprises an account creation service, and said request for access to said resource comprises a request for creation of a new account.
- 30. A method as recited in claim 22, wherein said resource comprises an index service, and said request for access to said resource comprises a request for the addition of a uniform resource locator (URL) to said index service.
- 31. A method as recited in claim 22, wherein said resource comprises a directory service, and said request for access to said resource comprises a request for the addition of a uniform resource locator (URL) to said directory service.
- 32. A method as recited in claim 22, wherein said resource comprises a web server, and said request for access to said resource comprises a request for information from said web server.
- 33. A method as recited in claim 22, wherein said resource comprises a web server, and said request for access to said resource comprises a request for the creation of a network connection with said web server.
- 34. A system for use in connection with a plurality of computers having a range of processing power and cache sizes, for constructing and using a computational puzzle whose solution takes approximately the same amount of time on the plurality of computers, comprising:
means for selecting a computational puzzle having a solution which is best found by a computation whose speed is limited by memory latency; and means for communicating information about the computational puzzle to at least one of the computers so as to cause said at least one computer to solve the puzzle in a manner causing said at least one computer to incur a computational cost.
- 35. A system as recited in claim 34, wherein the solution of the puzzle causes the at least one computer to access a pseudo-random sequence of locations in a memory array.
- 36. A system as recited in claim 35, wherein the memory array is significantly larger than the largest cache generally available to the plurality of computers.
- 37. A system as recited in claim 35, wherein the memory array to be accessed by the at least one computer has 2n entries, where n is an integer, and the computational puzzle comprises a function F( ) whose domain and range are integers in the range 0 . . . 2n−1, wherein F( ) is characterized in that its inverse F−1( ) cannot be evaluated in less time than a memory access.
- 38. A system as recited in claim 35, wherein said system is implemented as follows:
(1) let k and n be integers and F( ) a function whose domain and range are integers in the range 0 . . . (2n−1); (2) pick an integer x0 in 0 . . . (2n−1), and for i ε 0 . . . (k−1), computexi+1=F(x1) xor iand a checksum of the sequence x0, . . . , xk; (3) send xk and the checksum to the at least one computer; and (4) require the at least one computer to use this information to find x0.
- 39. A system as recited in claim 34, further comprising mean for using the computational puzzle to prevent abuse of a resource on a computer network.
- 40. A system as recited in claim 39, comprising:
means for receiving a request for access to said resource from a client; and means for requiring said client to show that it has computed a solution to the computational puzzle before providing access to said resource.
- 41. A system as recited in claim 40, wherein said resource comprises an e-mail delivery service, and said request for access to said resource comprises a request for delivery of an e-mail message.
- 42. A system as recited in claim 40, wherein said resource comprises an account creation service, and said request for access to said resource comprises a request for creation of a new account.
- 43. A system as recited in claim 40, wherein said resource comprises an index service, and said request for access to said resource comprises a request for the addition of a uniform resource locator (URL) to said index service.
- 44. A system as recited in claim 40, wherein said resource comprises a directory service, and said request for access to said resource comprises a request for the addition of a uniform resource locator (URL) to said directory service.
- 45. A system as recited in claim 40, wherein said resource comprises a web server, and said request for access to said resource comprises a request for information from said web server.
- 46. A system as recited in claim 40, wherein said resource comprises a web server, and said request for access to said resource comprises a request for the creation of a network connection with said web server.
- 47. A system as recited in claim 34, wherein said computational puzzle depends upon a password, and said solution is used as an extension to the password.
- 48. A system as recited in claim 47, wherein the system comprises first and second computers having a mechanism to share a password p; wherein the second computer includes means to supplement p by picking a password extension Q, a mechanism for posing a puzzle with solution Q, wherein the puzzle is such that the first computer can solve it with moderate effort by using p but such that Q is hard to find without p; and wherein the first computer includes a mechanism to solve the puzzle by using p.
- 49. A system as recited in claim 48, wherein the system is further characterized as follows:
the second computer derives a function F( ) from the password p, chooses the password extension Q, and lets a first number x0 be Q; the second computer computes a second number xk by evaluating F( ) k times with the recurrence xl+1=F(x1) xor i; the second computer finds a third number x′0 that also maps to xk using the recurrence; the second computer gives to the first computer a checksum of the path from x0 to xk, and x′0; and using p, the first computer derives F( ), builds a table for F31 1( ), computes xk, then uses xk and the table to find x0, which is then used as the password extension Q.
- 50. A system as recited in claim 48, wherein the first computer finds Q by computing a memory bound function.
- 51. A system as recited in claim 50, wherein the first computer uses p and Q to access password-protected information.
- 52. A system as recited in claim 50, wherein the first computer uses p and Q to decrypt files that the second computer has previously encrypted.
- 53. A system for preventing abuse of a resource on a computer network, comprising:
means for receiving a request for access to said resource from a client; and means for requiring said client to show that it has computed a predefined memory-bound function before providing access to said resource.
- 54. A system as recited in claim 53, wherein said memory-bound function comprises an algorithm that causes said client, in computing said function, to access locations in a region of memory.
- 55. A system as recited in claim 54, wherein the size of said region of memory to be accessed by said client is significantly larger than the size of the largest cache of any computer on which the system might be implemented.
- 56. A system as recited in claim 54, wherein said algorithm prescribes a computation on a large data structure, thus forcing said client to perform memory accesses across said region of memory.
- 57. A system as recited in claim 54, wherein said algorithm causes said client to compute an inverse function F31 1( ) of a function F( ), wherein F( ) is a function whose domain and range are integers in the range 0 . . . . (2n−1), where 2n is the number of entries in said memory; and wherein F31 1( ) cannot be evaluated in less time than a memory access, such that said client is benefited by building a memory-based lookup table for F31 1( ).
- 58. A system as recited in claim 57, wherein said system is implemented as follows:
(1) let k and n be integers and F( ) a function whose domain and range are integers in the range 0 . . . (2n−1); (2) pick an integer x0 in 0 . . . (2n−1), and for i ε 0 . . . (k−1), computexi+1=F(x1) xor iand a checksum of the sequence x0, . . . , xk; (3) send at least some bits of xk and the checksum to said client; and (4) require said client to use this information to find x0.
- 59. A system as recited in claim 53, wherein said resource comprises an e-mail delivery service, and said request for access to said resource comprises a request for delivery of an e-mail message.
- 60. A system as recited in claim 53, wherein said resource comprises an account creation service, and said request for access to said resource comprises a request for creation of a new account.
- 61. A system as recited in claim 53, wherein said resource comprises an index service, and said request for access to said resource comprises a request for the addition of a uniform resource locator (URL) to said index service.
- 62. A system as recited in claim 53, wherein said resource comprises a directory service, and said request for access to said resource comprises a request for the addition of a uniform resource locator (URL) to said directory service.
- 63. A system as recited in claim 53, wherein said resource comprises a web server, and said request for access to said resource comprises a request for information from said web server.
- 64. A system as recited in claim 53, wherein said resource comprises a network server, and said request for access to said resource comprises a request for the creation of a network connection with said network server.
- 65. A system as recited in claim 53, wherein the system issues a challenge to the client by:
producing a keyed hash H(k, x0) of x0, wherein H is a keyed hash function and k is a key not known to the client; and giving H(k, x0) to the client along with the challenge.
- 66. A system as recited in claim 65, wherein the client is required to return both x0 and H(k, x0), so that the system can check that the client's response is correct by recomputing H(k, x0) from k and x0.
- 67. A system as recited in claim 53, wherein the function is varied from time to time.
- 68. A system as recited in claim 53, wherein the function is varied from challenge to challenge.
- 69. A system as recited in claim 53, wherein the client is required to show that it has computed a plurality of functions before it is given access to the resource.
- 70. A system as recited in claim 58, wherein multiple functions F( ) are employed to construct xk to be presented to the client.
- 71. A system as recited in claim 34, wherein the computational puzzle is based on a memory bound function that is varied from time to time.
- 72. A system as recited in claim 34, wherein the computational puzzle is based on a memory bound function that is varied from challenge to challenge.
- 73. A system as recited in claim 34, wherein the at least one computer is required to show that it has computed a plurality of memory bound functions.
- 74. A method as recited in claim 1, wherein the computational puzzle is based on a memory bound function that is varied from time to time.
- 75. A method as recited in claim 1, wherein the computational puzzle is based on a memory bound function that is varied from challenge to challenge.
- 76. A method as recited in claim 1, wherein the at least one computer is required to show that it has computed a plurality of memory bound functions.
CROSS-REFERENCE TO RELATED APPLICATION
[0001] The subject matter described herein is related to the subject matter disclosed in co-pending application Ser. No.______, filed on even date herewith (attorney docket MSFT-1408), “Ticket Server For Spam Prevention And The Like.”