[Search for users] [Overall Top Noters] [List of all Conferences] [Download this site]

Conference rusure::math

Title:Mathematics at DEC
Moderator:RUSURE::EDP
Created:Mon Feb 03 1986
Last Modified:Fri Jun 06 1997
Last Successful Update:Fri Jun 06 1997
Number of topics:2083
Total number of notes:14613

2055.0. "adversarily distributed private incremental deal" by AMCFAC::RABAHY (dtn 471-5160, outside 1-810-347-5160) Fri Jul 26 1996 21:37

Is a distributed algorithm to incrementally generate a private deal possible?

I am using the term "deal" in the sense of a vector of unique integers ranging
from 1 to N in random order.

By "incremental", I mean the vector is revealed over time.

By "private", I mean disjoint subsets of the deal are known to distinct entities.

By "distributed", I mean no reliance upon an independent entity is permitted.

By "adversarily", I mean each entity must not be able to overcome the private
requirement even through collaboration with other entities.  Naturally at the
end of the deal the contents of a single unknown subset can be determined.

It is trivial to defer to a third party, I want only the entities involved to
generate the deal.

It seems like encryption, especially public key and digital signatures would be
a useful place to start.
T.RTitleUserPersonal
Name
DateLines
2055.1AMCFAC::RABAHYdtn 471-5160, outside 1-810-347-5160Mon Jul 29 1996 14:0719
Did you ever do that thing with your fingers to determine who goes first?

One person (chosen arbitrarily) announces even or odd; then both of them reveal
a number of fingers concurrently; if the sum is even or odd as the announcer
proclaimed then they are first otherwise the other person is.

Can this or something like it be implemented with typical computers on a typical
network?  The problem seems to be how to share your number with the other entity
without risking your position.  If they get it first then they could quickly
change their own number to their advantage.

My thought is to transmit your number to your opponent encrypted.  Only after
receiving their number, also encrypted, would you send the key to decrypt
your's.  The thing I'm wondering is, is it possible for your opponent to send a
different key to decrypt their number to their advantage?  Could a digital
signature secure against this?

Once we get this function, can it be used to build up to the function described
in .0?
2055.2cross reference to AUSS:ALGORITHMS 252AMCFAC::RABAHYdtn 471-5160, outside 1-810-347-5160Tue Jul 30 1996 13:550
2055.3RUSURE::EDPAlways mount a scratch monkey.Tue Jul 30 1996 18:0021
    One way to generate a trusted random bit is to select two large random
    primes, one of them congruent to 1 modulo 4 and the other congruent to
    3.  Send their product to the other party.  The other party randomly
    states "0" or "1".  Xor that bit with 0 if the lesser factor is
    congruent to 1 and 1 if the lesser factor is congruent to 3.
    
    A way to generate larger trusted random numbers is to select a random
    number modulo N, where N is any desired integer, and encrypt it with
    PGP.  The encrypted message is transmitted to the other party.  The
    other party selects another random number modulo N and transmits it. 
    Then the decryption is revealed (and checked).  The sum of the two
    numbers, modulo N, is the final random number.  (Actually, PGP adds
    some random bits that make checking the encryption problematic, but the
    idea is sound.)
    
    
    				-- edp
    
    
Public key fingerprint:  8e ad 63 61 ba 0c 26 86  32 0a 7d 28 db e7 6f 75
To find PGP, read note 2688.4 in Humane::IBMPC_Shareware.
2055.4RUSURE::EDPAlways mount a scratch monkey.Wed Jul 31 1996 11:5323
    Suppose A and B have encryption and decryption keys and encryption and
    decryption with these keys are commutative.  (I know this is possible;
    Chaum's Digicash uses it.  In RSA, the encryption of m with key e is
    m^e % n, so the encryption with keys e and f is (m^e)^f % n = m^(e*f) %
    n = m^(f*e) % n = (m^f)^e % n.  That requires a common n for A and B,
    which is a problem I'm not sure how to deal with.)
    
    A shuffles a set of playing cards, encrypts each card, and sends the
    encrypted set to B.  B shuffles the set, encrypts each element, and
    shares the result with A.
    
    Now there is a pool of "face-down" cards that the two players may draw
    from.  Whenever A selects an element, B decrypts it and gives the
    result to A, who decrypts it privately to get the card.  Conversely, B
    selects an element, A decrypts it and gives the result to B, who
    decrypts it privately to get the card.
    
    
    				-- edp
    
    
Public key fingerprint:  8e ad 63 61 ba 0c 26 86  32 0a 7d 28 db e7 6f 75
To find PGP, read note 2688.4 in Humane::IBMPC_Shareware.
2055.5RUSURE::EDPAlways mount a scratch monkey.Mon Aug 05 1996 13:1053
    By chance, I saw a mention of blinding in another discussion.  Here is
    how A can have B sign or encrypt a message using B's key while B does
    not know what is being signed or encrypted and A does not learn B's
    private key.
    
    Normally, B decrypts an encrypted text t by computing m = t^d % n, to
    get the message m.  The encryption is t = m^e % n.  Let A make up a
    random number b as the blinding factor.  Then A takes t and computes
    t*b^e % n.  A gives this to B, who decrypts it, yielding:
    
    	(t*b^e)^d % n
    		= (t^d * (b^e)^d)) % n
    		= (t^d * b^(e*d)) % n
    		= (t^d * b) % n.
    
    The last step holds since anything (relatively prime to n) raised to
    the power of e*d is congruent to itself modulo n.
    
    Now A has b*t^d % n and can compute t^d % n by multiplying by the
    inverse of b modulo n.
    
    Now we can see how a shuffle works without revealing anybody's keys or
    requiring a shared modulus.  A encrypts each card of a deck, shuffles
    the results, and gives them to B.  B encrypts them and shuffles again. 
    Whenever a player wants a card, they pick one of the remaining
    encrypted texts, which is necessarily a random draw.
    
    If B is drawing, B decrypts it with B's key, then blinds it and
    presents it to A for decryption.  B unblinds the result and has a card.
    
    If A is drawing, A blinds it, presents it to B for decryption, unblinds
    the result, and decrypts it with A's key.
    
    Another issue is how one player proves to another that they do possess
    the card they now wish to play openly.  Observe that the plaintext of
    any card, when encrypted with A's key and then B's key, yields the
    number that was drawn from the pool.  Of course, that itself is a
    problem, since either player can figure out what the cards in the pool
    are, since encryption keys are public!
    
    But this is solved with random padding.  As part of each encryption
    process, random bits are appended to the plaintext.  The results cannot
    be figured out by encrypting cards, since each player does not know the
    other's random padding.  But once the plaintext is recovered, it is
    clearly the playing card with some extra bits, and the encryptions can
    be verified.
    
    
    				-- edp
    
    
Public key fingerprint:  8e ad 63 61 ba 0c 26 86  32 0a 7d 28 db e7 6f 75
To find PGP, read note 2688.4 in Humane::IBMPC_Shareware.
2055.6nonserious response, please ignorePAWN21::OSMANsee HANNAH::IGLOO$:[OSMAN]ERIC.VT240Mon Aug 05 1996 20:199
Reminds me of the following nonsense:

	Always shuffle a new deck of cards extra times before dealing,
	since new decks are packaged in order.  However, take care not
	to OVER shuffle, as the cards will start coming back into order.

/Eric