Well, this topic is very large, but here is a brief overview of a possible solution
Image fingerprints are collections of SIFT descriptors These are quantized both to reduce size, and to allow indexing
Build an inverted index of your database to allow looking up an image by quantized descriptors (you can use any full text search engine \ DB for this)
Given an image, lookup images which share a large amount of common descriptors
For those potential candidates, you should validate that the spatial arrangement of descriptors is similar enough
Some articles to get you started:
Mikulík, Andrej, et al. "Learning a fine vocabulary." Computer Vision–ECCV 2010 (2010): 1-14.