Knapsack-based cryptosystems