## 3 Monte Carlo Simulation Methodology  
To determine the MDI-QKD QBER for achievable single photon source tolerances, we perform Monte Carlo simulations utilizing the probabilities of (10) and the overlap integral of (12). The single photon source parameters (wavelength \(\lambda=788\) nm, wavelength tolerance \(\sigma_{\lambda}=0.17\) nm, pulse bandwidth \(\Delta\omega=1.18\times 10^{12}\) rad/s, pulse bandwidth tolerance \(\sigma_{\Delta\omega}=1.18\times 10^{10}\) rad/s, synchronization tolerance \(\sigma_{t}=0.26\) ps, and polarization angle tolerance \(\sigma_{\theta}=1^{\circ}\)) are selected consistently with those described by [PERSON] et al. [17], who report a \((96\pm 1)\)% HOM-interference visibility using independent single photon sources in an entanglement swapping experiment that is functionally identical to a MDI-QKD implementation. They report the standard deviation of their pulse synchronization and the full-width-at-half-maximum of the filters used to limit fluctuations in the photon wavelengths. We estimate the bandwidth of their pulses on the basis of the width of their HOM-dips and assume a 1% relative fluctuation. The assumed polarization standard deviation is typical of laboratory optics [18]. The results of [17] are particularly relevant because the two photon sources used are completely independent, communicating only via an electronic synchronization signal, just as required for MDI-QKD. The simulation procedure is outlined below. 1. Construct \(N_{\text{raw}}\)-element arrays of [PERSON]'s and [PERSON]'s randomly selected basis choices. 2. Construct \(N_{\text{raw}}\)-element arrays of [PERSON]'s and [PERSON]'s randomly selected raw keys bits. 3. Compare [PERSON]'s and [PERSON]'s random basis selections and discard trials corresponding to opposite-basis selection from further consideration, retaining \(N_{\text{same}}\approx N_{\text{raw}}/2\) trials. 4. Compute the photon polarization angles for each photon in each trial from the choices of basis, raw key bits, and polarization error tolerances. 5. Compute the photon wavelength errors for each photon in each trial from the photon wavelength tolerances. 6. Compute the bandwidth of each photon pulse in each trial from the mean bandwidth and the bandwidth tolerances. 7. Compute the photon arrival time synchronization error for each trial from the synchronization time tolerance. Figure 3: Coincidence probability as a function of beam splitter arrival time difference for photon pairs with varying degrees of distinguishability. The coincidence rate vanishes for perfectly identical photons arriving simultaneously, with the width of the HOM dip determined by the pulse bandwidth. **(a)** displays the coincidence probability curves for two photons with an identical bandwidth \(\Delta\omega=1.18\times 10^{12}\) rad/s and different wavelengths. **(b)** uses two photons with an identical wavelength \(\lambda=788\) nm and different bandwidths, which center around \(\Delta\omega=1.18\times 10^{12}\) rad/s. These parameters are chosen consistently with those of the simulations described in Section 4. * Use the results of steps (4) through (7) to calculate the probability of each possible measurement outcome for each trial. * For each trial select a particular measurement outcome in accordance with the probabilities calculated in step (8). * Discard unusable trials and flip [PERSON]'s key bit in accordance with the results of step (9), retaining \(N_{\text{sifted}}\approx N_{\text{raw}}/4\) bits. * Compare [PERSON]'s and [PERSON]'s sifted keys to determine the \(\text{QBER}=N_{\text{error}}/N_{\text{sifted}}\)[19]. This procedure is implemented in Python 3[20] and executed with version 4.4.0-Windows-x86_64 of Anaconda3[21]. Random measurement outcomes are selected by calls to the numpy.random.choice() routine of the numpy package [22]. The code is fully documented and provided in the online supplement.