Hey! I program a lot but I’m not very good with cybersecurity and stuff, although I have a basic usage of GPG and asymetrical encryption.

My problem is:

Let’s imagine that Alice (A) and Bob (B) each have a file with a number written in it.

Ideally, I’d like a program that A can run on her computer that would take the B file but encrypted, and output the minimum of the two values contained in A and B files.

But without any way for A to know what the number of B is, except if B value is the minimum, obviously.

Can someone help me with that? Thank you for reading!

  • @Khanzarate@lemmy.world
    cake
    link
    fedilink
    56 months ago

    If A can run this program at will and it determines the minimum value, it’s O(log(n)) to determine what B is, even with perfect encryption, by using arbitrary values of A.

    INT X = MAX INT PREV_X = 0 BOOL B_IS_MIN = True

    While (X != PREV_X){

    PREV_X = X B_IS_MIN = Encrypted_Min(X,B)

    If(B_IS_MIN), X = X/2 If(!B_IS_MIN), X = X*1.5

    }

    Unless I’ve made a typo, this psuedocode will step to B in log time, and will break the while loop once it’s found, even if the user has no way to know the value of B besides the minimum.

    • @payassonOP
      link
      06 months ago

      Indeed, I didn’t think of that. And would it be possible to allow only one check and destroy/make the information of B unusable after this check?

      Thank you for your reply!

        • @payassonOP
          link
          06 months ago

          that’s interesting indeed! thank you very much!

      • @Khanzarate@lemmy.world
        cake
        link
        fedilink
        16 months ago

        Possibly. I’m not a big crypto guy, but it’s my understanding that any kind of transaction has a chance of being repeated. If there were a bad actor, and that bad actor used a VPN to swap identities, he could narrow this down considerably and weaken encryption. My code is as dumb as it gets, willing to consider 1 as a valid encryption key, but smarter code would be a lot more efficient.

        On top of that, you wanted this minimum code to run on A’s computer. If you do not trust A, then you’ve given a potential bad actor a program that could be decompiled to unencrypt your keys.

        It sounds to me like in your current state, you need to trust A before you do this operation, and if you do, you can just share an unencrypted B.

        • @payassonOP
          link
          06 months ago

          Alright thank you for your reply, I’ll think about it :) maybe having a vérification that can be done in any computer and any amount of time is just not possible for my use case