1. A method of protecting data, said method comprising the steps of: selecting an NP-hard problem to be solved; selecting a data structure to be used for representing said problem; representing an instance of said problem with said data structure; and encrypting said data with a sequence which is obtained by solving said problem.