sebwrede commented on a change in pull request #1525:
URL: https://github.com/apache/systemds/pull/1525#discussion_r793524481



##########
File path: 
src/main/java/org/apache/sysds/runtime/controlprogram/federated/FederatedWorkerHandler.java
##########
@@ -417,9 +417,11 @@ private FederatedResponse execUDF(FederatedRequest 
request, ExecutionContextMap
                ExecutionContext ec = ecm.get(request.getTID());
 
                // get function and input parameters
+               // FIXME: handle HE privacy constraints

Review comment:
       When the `-federatedCompilation` flag is added to the execution of the 
DML script, the rewriter `RewriteFederatedExecution.java` will be called where 
the privacy constraints will be retrieved from the federated workers for all 
federated data inputs in the script. You need to add a check for when the 
privacy level "Private" is set for an input to the parameter server so that you 
can switch to the encrypted version of the federated parameter server. 
   In the FederatedWorkerHandler, the call to the PrivacyMonitor needs to check 
if the UDF received is the UDF from the encrypted version of the parameter 
server. If this is the case, the PrivacyMonitor should not block data inputs 
with the privacy level "Private". For all other UDFs or instructions, the 
PrivacyMonitor should still block requests for the "Private" data elements, 
since the data elements will be transferred unencrypted to the coordinator 
otherwise.
   The idea behind the PrivacyMonitor check in the FederatedWorkerHandler is 
that the UDF has some input data and the privacy constraints of that input is 
checked. It is the responsibility of the SystemDS developer to ensure that no 
other data is exposed when running the UDF since it is possible to access other 
data in the UDF execution without checking the privacy level of those data 
elements.  
   Regarding the propagation of the privacy constraints, this happens in the 
`PrivacyPropagator.java` class. During runtime, CPInstructions will, before 
execution, propagate the privacy constraints from the inputs to the outputs. In 
your case, I don't think that you execute any CPInstructions since you only 
send a UDF. In the UDF, you need to handle the propagation if you leave any 
output on the federated workers. You can add such propagation logic to the 
PrivacyPropagator class and reuse the logic in the corePropagation method by 
calling that method. If you do not leave any output on the federated workers 
then you do not have to think about the propagation, but you still have to 
think about which data elements you send back to the coordinator. If the data 
has the privacy level "Private" then you should only transfer the encrypted 
version of it. The encrypted data does not need the privacy constraint unless 
the decryption key is transferred also (which it is not because only the fede
 rated workers can fully decrypt it). When the federated workers decrypt the 
aggregated data sent from the coordinator, you need to add a privacy constraint 
to that output so that it is not sent back to the coordinator without being 
encrypted again. The output should again have the privacy level "Private". 
   
   This is now a long comment :smile: . Please ask if anything is unclear. 




-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


Reply via email to