A method for data deduplication on a solid state drive of a signature server serving at least one client, the signature server comprising a central processing unit, and the SSD comprising a controller and a plurality of storage elements on which data and a signature library are stored, the method comprising: receiving, by the CPU, the signature of a block of data from one of the at least one clients and sending the signature to the controller; receiving (602, 404, 406), by the controller and from the CPU, the signature and a read address, wherein the read address had been calculated based on the signature; accessing (604, 408), by the controller, the entry stored at the read address in the signature library; determining (606, 408), by the controller, whether the signature matches the information at the entry at the read address in the signature library; sending (608, 410, 414) a signal from the controller to the CPU that indicates the result of said determining; notifying, by the CPU, said one client about the result of said determining; and in case of the signal indicating that the signature does not match the information in the signature library: receiving, by the controller, the block of data from said one client; adding, by the controller, the signature to the signature library; and writing, by the controller, the block of data to one of the storage elements of the SSD, wherein if the signature matches the information in the signature library then the signal has a first value indicating that the block of data is already stored on the SSD, and if the signature does not match the information in the signature library then the signal has a second value that is different from the first value, which indicates that the block of data is currently not stored on the SSD. receiving, by the CPU, the signature of a block of data from one of the at least one clients and sending the signature to the controller; receiving (602, 404, 406), by the controller and from the CPU, the signature and a read address, wherein the read address had been calculated based on the signature; accessing (604, 408), by the controller, the entry stored at the read address in the signature library; determining (606, 408), by the controller, whether the signature matches the information at the entry at the read address in the signature library; sending (608, 410, 414) a signal from the controller to the CPU that indicates the result of said determining; notifying, by the CPU, said one client about the result of said determining; and in case of the signal indicating that the signature does not match the information in the signature library: receiving, by the controller, the block of data from said one client; adding, by the controller, the signature to the signature library; and writing, by the controller, the block of data to one of the storage elements of the SSD, receiving, by the controller, the block of data from said one client; adding, by the controller, the signature to the signature library; and writing, by the controller, the block of data to one of the storage elements of the SSD, wherein if the signature matches the information in the signature library then the signal has a first value indicating that the block of data is already stored on the SSD, and if the signature does not match the information in the signature library then the signal has a second value that is different from the first value, which indicates that the block of data is currently not stored on the SSD.