CINXE.COM

IPLS: Privacy-preserving storage for your WhatsApp contacts - Engineering at Meta

<!DOCTYPE html> <html lang="en-US"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <meta name="mobile-web-app-capable" content="yes"> <meta name="apple-mobile-web-app-capable" content="yes"> <meta name="apple-mobile-web-app-title" content="Engineering at Meta - Engineering at Meta Blog"> <meta property="fb:app_id" content="1425766027653270" /> <link rel="profile" href="http://gmpg.org/xfn/11"> <link rel="pingback" href="https://engineering.fb.com/xmlrpc.php"> <meta name='robots' content='index, follow, max-image-preview:large, max-snippet:-1, max-video-preview:-1' /> <style>img:is([sizes="auto" i], [sizes^="auto," i]) { contain-intrinsic-size: 3000px 1500px }</style> <script async src="https://engineering.fb.com/wp-content/themes/code-fb-com/dist/js/optimize.min.js"></script> <!-- This site is optimized with the Yoast SEO Premium plugin v19.3 (Yoast SEO v19.12) - https://yoast.com/wordpress/plugins/seo/ --> <title>IPLS: Privacy-preserving storage for your WhatsApp contacts - Engineering at Meta</title> <link rel="canonical" href="https://engineering.fb.com/2024/10/22/security/ipls-privacy-preserving-storage-for-your-whatsapp-contacts/" /> <meta name="twitter:label1" content="Written by" /> <meta name="twitter:data1" content="Slavik Krassovsky, Kevin Lewi, Dillon George, Cheng Tian, Ercan Ozturk" /> <meta name="twitter:label2" content="Est. reading time" /> <meta name="twitter:data2" content="5 minutes" /> <script type="application/ld+json" class="yoast-schema-graph">{"@context":"https://schema.org","@graph":[{"@type":"Article","@id":"https://engineering.fb.com/2024/10/22/security/ipls-privacy-preserving-storage-for-your-whatsapp-contacts/#article","isPartOf":{"@id":"https://engineering.fb.com/2024/10/22/security/ipls-privacy-preserving-storage-for-your-whatsapp-contacts/"},"author":[{"@id":"https://engineering.fb.com/#/schema/person/image/5716d2ee1fa96ceba9b31e65971c4e84"},{"@id":"https://engineering.fb.com/#/schema/person/image/69237e68805ba201b952ae7a59239988"},{"@id":"https://engineering.fb.com/#/schema/person/image/f4ab150bf66c8508b2066fb324792f44"},{"@id":"https://engineering.fb.com/#/schema/person/image/bf7ae971e6a5097781a79a47ce9f2f3a"},{"@id":"https://engineering.fb.com/#/schema/person/image/65f5e9eddab1c3282ba26d9795b881bb"}],"headline":"IPLS: Privacy-preserving storage for your WhatsApp contacts","datePublished":"2024-10-22T12:59:46+00:00","dateModified":"2024-10-22T14:23:35+00:00","mainEntityOfPage":{"@id":"https://engineering.fb.com/2024/10/22/security/ipls-privacy-preserving-storage-for-your-whatsapp-contacts/"},"wordCount":1097,"publisher":{"@id":"https://engineering.fb.com/#organization"},"image":{"@id":"https://engineering.fb.com/2024/10/22/security/ipls-privacy-preserving-storage-for-your-whatsapp-contacts/#primaryimage"},"thumbnailUrl":"https://engineering.fb.com/wp-content/uploads/2024/10/WhatsApp-IPLS-image-3_crop.png","keywords":["WhatsApp"],"articleSection":["Security"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https://engineering.fb.com/2024/10/22/security/ipls-privacy-preserving-storage-for-your-whatsapp-contacts/","url":"https://engineering.fb.com/2024/10/22/security/ipls-privacy-preserving-storage-for-your-whatsapp-contacts/","name":"IPLS: Privacy-preserving storage for your WhatsApp contacts - Engineering at Meta","isPartOf":{"@id":"https://engineering.fb.com/#website"},"primaryImageOfPage":{"@id":"https://engineering.fb.com/2024/10/22/security/ipls-privacy-preserving-storage-for-your-whatsapp-contacts/#primaryimage"},"image":{"@id":"https://engineering.fb.com/2024/10/22/security/ipls-privacy-preserving-storage-for-your-whatsapp-contacts/#primaryimage"},"thumbnailUrl":"https://engineering.fb.com/wp-content/uploads/2024/10/WhatsApp-IPLS-image-3_crop.png","datePublished":"2024-10-22T12:59:46+00:00","dateModified":"2024-10-22T14:23:35+00:00","breadcrumb":{"@id":"https://engineering.fb.com/2024/10/22/security/ipls-privacy-preserving-storage-for-your-whatsapp-contacts/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https://engineering.fb.com/2024/10/22/security/ipls-privacy-preserving-storage-for-your-whatsapp-contacts/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https://engineering.fb.com/2024/10/22/security/ipls-privacy-preserving-storage-for-your-whatsapp-contacts/#primaryimage","url":"https://engineering.fb.com/wp-content/uploads/2024/10/WhatsApp-IPLS-image-3_crop.png","contentUrl":"https://engineering.fb.com/wp-content/uploads/2024/10/WhatsApp-IPLS-image-3_crop.png","width":1920,"height":600},{"@type":"BreadcrumbList","@id":"https://engineering.fb.com/2024/10/22/security/ipls-privacy-preserving-storage-for-your-whatsapp-contacts/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://engineering.fb.com/"},{"@type":"ListItem","position":2,"name":"IPLS: Privacy-preserving storage for your WhatsApp contacts"}]},{"@type":"WebSite","@id":"https://engineering.fb.com/#website","url":"https://engineering.fb.com/","name":"Engineering at Meta","description":"Engineering at Meta Blog","publisher":{"@id":"https://engineering.fb.com/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://engineering.fb.com/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https://engineering.fb.com/#organization","name":"Meta","url":"https://engineering.fb.com/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https://engineering.fb.com/#/schema/logo/image/","url":"https://engineering.fb.com/wp-content/uploads/2023/08/Meta_lockup_positive-primary_RGB.jpg","contentUrl":"https://engineering.fb.com/wp-content/uploads/2023/08/Meta_lockup_positive-primary_RGB.jpg","width":29011,"height":12501,"caption":"Meta"},"image":{"@id":"https://engineering.fb.com/#/schema/logo/image/"},"sameAs":["https://www.facebook.com/Engineering/","https://twitter.com/fb_engineering"]},[],{"@type":"Person","@id":"https://engineering.fb.com/#/schema/person/image/5716d2ee1fa96ceba9b31e65971c4e84","name":"Slavik Krassovsky","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https://engineering.fb.com/#/schema/person/image/23494c9101089ad44ae88ce9d2f56aac","url":"https://secure.gravatar.com/avatar/?s=96&d=mm&r=g","contentUrl":"https://secure.gravatar.com/avatar/?s=96&d=mm&r=g","caption":"Slavik Krassovsky"},"url":"https://engineering.fb.com/author/slavik-krassovsky/"},{"@type":"Person","@id":"https://engineering.fb.com/#/schema/person/image/69237e68805ba201b952ae7a59239988","name":"Kevin Lewi","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https://engineering.fb.com/#/schema/person/image/23494c9101089ad44ae88ce9d2f56aac","url":"https://secure.gravatar.com/avatar/?s=96&d=mm&r=g","contentUrl":"https://secure.gravatar.com/avatar/?s=96&d=mm&r=g","caption":"Kevin Lewi"},"sameAs":["https://klewi.com/"],"url":"https://engineering.fb.com/author/kevin-lewi/"},{"@type":"Person","@id":"https://engineering.fb.com/#/schema/person/image/f4ab150bf66c8508b2066fb324792f44","name":"Dillon George","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https://engineering.fb.com/#/schema/person/image/23494c9101089ad44ae88ce9d2f56aac","url":"https://secure.gravatar.com/avatar/?s=96&d=mm&r=g","contentUrl":"https://secure.gravatar.com/avatar/?s=96&d=mm&r=g","caption":"Dillon George"},"url":"https://engineering.fb.com/author/dillon-george/"},{"@type":"Person","@id":"https://engineering.fb.com/#/schema/person/image/bf7ae971e6a5097781a79a47ce9f2f3a","name":"Cheng Tian","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https://engineering.fb.com/#/schema/person/image/23494c9101089ad44ae88ce9d2f56aac","url":"https://secure.gravatar.com/avatar/?s=96&d=mm&r=g","contentUrl":"https://secure.gravatar.com/avatar/?s=96&d=mm&r=g","caption":"Cheng Tian"},"url":"https://engineering.fb.com/author/cheng-tian/"},{"@type":"Person","@id":"https://engineering.fb.com/#/schema/person/image/65f5e9eddab1c3282ba26d9795b881bb","name":"Ercan Ozturk","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https://engineering.fb.com/#/schema/person/image/23494c9101089ad44ae88ce9d2f56aac","url":"https://secure.gravatar.com/avatar/?s=96&d=mm&r=g","contentUrl":"https://secure.gravatar.com/avatar/?s=96&d=mm&r=g","caption":"Ercan Ozturk"},"url":"https://engineering.fb.com/author/ercan-ozturk/"}]}</script> <!-- / Yoast SEO Premium plugin. --> <link rel='dns-prefetch' href='//secure.gravatar.com' /> <link rel='dns-prefetch' href='//v0.wordpress.com' /> <link rel="alternate" type="application/rss+xml" title="Engineering at Meta &raquo; Feed" href="https://engineering.fb.com/feed/" /> <link rel="alternate" type="application/rss+xml" title="Engineering at Meta &raquo; Comments Feed" href="https://engineering.fb.com/comments/feed/" /> <script async src="https://www.googleoptimize.com/optimize.js?id=OPT-TPNDQC5" onerror="dataLayer.hide.end && dataLayer.hide.end()"></script> <script type="text/javascript"> /* <![CDATA[ */ window._wpemojiSettings = {"baseUrl":"https:\/\/s.w.org\/images\/core\/emoji\/15.0.3\/72x72\/","ext":".png","svgUrl":"https:\/\/s.w.org\/images\/core\/emoji\/15.0.3\/svg\/","svgExt":".svg","source":{"concatemoji":"https:\/\/engineering.fb.com\/wp-includes\/js\/wp-emoji-release.min.js?ver=6.7.1"}}; /*! This file is auto-generated */ !function(i,n){var o,s,e;function c(e){try{var t={supportTests:e,timestamp:(new Date).valueOf()};sessionStorage.setItem(o,JSON.stringify(t))}catch(e){}}function p(e,t,n){e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(t,0,0);var t=new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data),r=(e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(n,0,0),new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data));return t.every(function(e,t){return e===r[t]})}function u(e,t,n){switch(t){case"flag":return n(e,"\ud83c\udff3\ufe0f\u200d\u26a7\ufe0f","\ud83c\udff3\ufe0f\u200b\u26a7\ufe0f")?!1:!n(e,"\ud83c\uddfa\ud83c\uddf3","\ud83c\uddfa\u200b\ud83c\uddf3")&&!n(e,"\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc65\udb40\udc6e\udb40\udc67\udb40\udc7f","\ud83c\udff4\u200b\udb40\udc67\u200b\udb40\udc62\u200b\udb40\udc65\u200b\udb40\udc6e\u200b\udb40\udc67\u200b\udb40\udc7f");case"emoji":return!n(e,"\ud83d\udc26\u200d\u2b1b","\ud83d\udc26\u200b\u2b1b")}return!1}function f(e,t,n){var r="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?new OffscreenCanvas(300,150):i.createElement("canvas"),a=r.getContext("2d",{willReadFrequently:!0}),o=(a.textBaseline="top",a.font="600 32px Arial",{});return e.forEach(function(e){o[e]=t(a,e,n)}),o}function t(e){var t=i.createElement("script");t.src=e,t.defer=!0,i.head.appendChild(t)}"undefined"!=typeof Promise&&(o="wpEmojiSettingsSupports",s=["flag","emoji"],n.supports={everything:!0,everythingExceptFlag:!0},e=new Promise(function(e){i.addEventListener("DOMContentLoaded",e,{once:!0})}),new Promise(function(t){var n=function(){try{var e=JSON.parse(sessionStorage.getItem(o));if("object"==typeof e&&"number"==typeof e.timestamp&&(new Date).valueOf()<e.timestamp+604800&&"object"==typeof e.supportTests)return e.supportTests}catch(e){}return null}();if(!n){if("undefined"!=typeof Worker&&"undefined"!=typeof OffscreenCanvas&&"undefined"!=typeof URL&&URL.createObjectURL&&"undefined"!=typeof Blob)try{var e="postMessage("+f.toString()+"("+[JSON.stringify(s),u.toString(),p.toString()].join(",")+"));",r=new Blob([e],{type:"text/javascript"}),a=new Worker(URL.createObjectURL(r),{name:"wpTestEmojiSupports"});return void(a.onmessage=function(e){c(n=e.data),a.terminate(),t(n)})}catch(e){}c(n=f(s,u,p))}t(n)}).then(function(e){for(var t in e)n.supports[t]=e[t],n.supports.everything=n.supports.everything&&n.supports[t],"flag"!==t&&(n.supports.everythingExceptFlag=n.supports.everythingExceptFlag&&n.supports[t]);n.supports.everythingExceptFlag=n.supports.everythingExceptFlag&&!n.supports.flag,n.DOMReady=!1,n.readyCallback=function(){n.DOMReady=!0}}).then(function(){return e}).then(function(){var e;n.supports.everything||(n.readyCallback(),(e=n.source||{}).concatemoji?t(e.concatemoji):e.wpemoji&&e.twemoji&&(t(e.twemoji),t(e.wpemoji)))}))}((window,document),window._wpemojiSettings); /* ]]> */ </script> <style id='wp-emoji-styles-inline-css'> img.wp-smiley, img.emoji { display: inline !important; border: none !important; box-shadow: none !important; height: 1em !important; width: 1em !important; margin: 0 0.07em !important; vertical-align: -0.1em !important; background: none !important; padding: 0 !important; } </style> <link rel='stylesheet' id='all-css-2' href='https://engineering.fb.com/wp-includes/css/dist/block-library/style.min.css?m=1732206022g' type='text/css' media='all' /> <link rel='stylesheet' id='all-css-4' href='https://engineering.fb.com/_static/??-eJzTLy/QzcxLzilNSS3WzyrWz01NyUxMzUnNTc0rQeEU5CRWphbp5qSmJyZX6uVm5uklFxfr6OPTDpRD5sM02efaGpobGxkZmBkYGQMARIMu1Q==' type='text/css' media='all' /> <style id='jetpack-sharing-buttons-style-inline-css'> .jetpack-sharing-buttons__services-list{display:flex;flex-direction:row;flex-wrap:wrap;gap:0;list-style-type:none;margin:5px;padding:0}.jetpack-sharing-buttons__services-list.has-small-icon-size{font-size:12px}.jetpack-sharing-buttons__services-list.has-normal-icon-size{font-size:16px}.jetpack-sharing-buttons__services-list.has-large-icon-size{font-size:24px}.jetpack-sharing-buttons__services-list.has-huge-icon-size{font-size:36px}@media print{.jetpack-sharing-buttons__services-list{display:none!important}}.editor-styles-wrapper .wp-block-jetpack-sharing-buttons{gap:0;padding-inline-start:0}ul.jetpack-sharing-buttons__services-list.has-background{padding:1.25em 2.375em} </style> <style id='elasticpress-facet-style-inline-css'> .widget_ep-facet input[type=search],.wp-block-elasticpress-facet input[type=search]{margin-bottom:1rem}.widget_ep-facet .searchable .inner,.wp-block-elasticpress-facet .searchable .inner{max-height:20em;overflow:scroll}.widget_ep-facet .term.hide,.wp-block-elasticpress-facet .term.hide{display:none}.widget_ep-facet .empty-term,.wp-block-elasticpress-facet .empty-term{opacity:.5;position:relative}.widget_ep-facet .empty-term:after,.wp-block-elasticpress-facet .empty-term:after{bottom:0;content:" ";display:block;left:0;position:absolute;right:0;top:0;width:100%;z-index:2}.widget_ep-facet .level-1,.wp-block-elasticpress-facet .level-1{padding-left:20px}.widget_ep-facet .level-2,.wp-block-elasticpress-facet .level-2{padding-left:40px}.widget_ep-facet .level-3,.wp-block-elasticpress-facet .level-3{padding-left:60px}.widget_ep-facet .level-4,.wp-block-elasticpress-facet .level-4{padding-left:5pc}.widget_ep-facet .level-5,.wp-block-elasticpress-facet .level-5{padding-left:75pt}.widget_ep-facet input[disabled],.wp-block-elasticpress-facet input[disabled]{cursor:pointer;opacity:1}.widget_ep-facet .term a,.wp-block-elasticpress-facet .term a{-webkit-box-align:center;-ms-flex-align:center;align-items:center;display:-webkit-box;display:-ms-flexbox;display:flex;position:relative}.widget_ep-facet .term a:hover .ep-checkbox,.wp-block-elasticpress-facet .term a:hover .ep-checkbox{background-color:#ccc}.ep-checkbox{-webkit-box-align:center;-ms-flex-align:center;-ms-flex-negative:0;-webkit-box-pack:center;-ms-flex-pack:center;align-items:center;background-color:#eee;display:-webkit-box;display:-ms-flexbox;display:flex;flex-shrink:0;height:1em;justify-content:center;margin-right:.25em;width:1em}.ep-checkbox:after{border:solid #fff;border-width:0 .125em .125em 0;content:"";display:none;height:.5em;-webkit-transform:rotate(45deg);transform:rotate(45deg);width:.25em}.ep-checkbox.checked{background-color:#5e5e5e}.ep-checkbox.checked:after{display:block} </style> <link rel='stylesheet' id='all-css-8' href='https://engineering.fb.com/wp-content/mu-plugins/search/elasticpress/dist/css/related-posts-block-styles.min.css?m=1730999764g' type='text/css' media='all' /> <style id='classic-theme-styles-inline-css'> /*! This file is auto-generated */ .wp-block-button__link{color:#fff;background-color:#32373c;border-radius:9999px;box-shadow:none;text-decoration:none;padding:calc(.667em + 2px) calc(1.333em + 2px);font-size:1.125em}.wp-block-file__button{background:#32373c;color:#fff;text-decoration:none} </style> <style id='global-styles-inline-css'> :root{--wp--preset--aspect-ratio--square: 1;--wp--preset--aspect-ratio--4-3: 4/3;--wp--preset--aspect-ratio--3-4: 3/4;--wp--preset--aspect-ratio--3-2: 3/2;--wp--preset--aspect-ratio--2-3: 2/3;--wp--preset--aspect-ratio--16-9: 16/9;--wp--preset--aspect-ratio--9-16: 9/16;--wp--preset--color--black: #000000;--wp--preset--color--cyan-bluish-gray: #abb8c3;--wp--preset--color--white: #ffffff;--wp--preset--color--pale-pink: #f78da7;--wp--preset--color--vivid-red: #cf2e2e;--wp--preset--color--luminous-vivid-orange: #ff6900;--wp--preset--color--luminous-vivid-amber: #fcb900;--wp--preset--color--light-green-cyan: #7bdcb5;--wp--preset--color--vivid-green-cyan: #00d084;--wp--preset--color--pale-cyan-blue: #8ed1fc;--wp--preset--color--vivid-cyan-blue: #0693e3;--wp--preset--color--vivid-purple: #9b51e0;--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple: linear-gradient(135deg,rgba(6,147,227,1) 0%,rgb(155,81,224) 100%);--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan: linear-gradient(135deg,rgb(122,220,180) 0%,rgb(0,208,130) 100%);--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange: linear-gradient(135deg,rgba(252,185,0,1) 0%,rgba(255,105,0,1) 100%);--wp--preset--gradient--luminous-vivid-orange-to-vivid-red: linear-gradient(135deg,rgba(255,105,0,1) 0%,rgb(207,46,46) 100%);--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray: linear-gradient(135deg,rgb(238,238,238) 0%,rgb(169,184,195) 100%);--wp--preset--gradient--cool-to-warm-spectrum: linear-gradient(135deg,rgb(74,234,220) 0%,rgb(151,120,209) 20%,rgb(207,42,186) 40%,rgb(238,44,130) 60%,rgb(251,105,98) 80%,rgb(254,248,76) 100%);--wp--preset--gradient--blush-light-purple: linear-gradient(135deg,rgb(255,206,236) 0%,rgb(152,150,240) 100%);--wp--preset--gradient--blush-bordeaux: linear-gradient(135deg,rgb(254,205,165) 0%,rgb(254,45,45) 50%,rgb(107,0,62) 100%);--wp--preset--gradient--luminous-dusk: linear-gradient(135deg,rgb(255,203,112) 0%,rgb(199,81,192) 50%,rgb(65,88,208) 100%);--wp--preset--gradient--pale-ocean: linear-gradient(135deg,rgb(255,245,203) 0%,rgb(182,227,212) 50%,rgb(51,167,181) 100%);--wp--preset--gradient--electric-grass: linear-gradient(135deg,rgb(202,248,128) 0%,rgb(113,206,126) 100%);--wp--preset--gradient--midnight: linear-gradient(135deg,rgb(2,3,129) 0%,rgb(40,116,252) 100%);--wp--preset--font-size--small: 13px;--wp--preset--font-size--medium: 20px;--wp--preset--font-size--large: 36px;--wp--preset--font-size--x-large: 42px;--wp--preset--spacing--20: 0.44rem;--wp--preset--spacing--30: 0.67rem;--wp--preset--spacing--40: 1rem;--wp--preset--spacing--50: 1.5rem;--wp--preset--spacing--60: 2.25rem;--wp--preset--spacing--70: 3.38rem;--wp--preset--spacing--80: 5.06rem;--wp--preset--shadow--natural: 6px 6px 9px rgba(0, 0, 0, 0.2);--wp--preset--shadow--deep: 12px 12px 50px rgba(0, 0, 0, 0.4);--wp--preset--shadow--sharp: 6px 6px 0px rgba(0, 0, 0, 0.2);--wp--preset--shadow--outlined: 6px 6px 0px -3px rgba(255, 255, 255, 1), 6px 6px rgba(0, 0, 0, 1);--wp--preset--shadow--crisp: 6px 6px 0px rgba(0, 0, 0, 1);}:where(.is-layout-flex){gap: 0.5em;}:where(.is-layout-grid){gap: 0.5em;}body .is-layout-flex{display: flex;}.is-layout-flex{flex-wrap: wrap;align-items: center;}.is-layout-flex > :is(*, div){margin: 0;}body .is-layout-grid{display: grid;}.is-layout-grid > :is(*, div){margin: 0;}:where(.wp-block-columns.is-layout-flex){gap: 2em;}:where(.wp-block-columns.is-layout-grid){gap: 2em;}:where(.wp-block-post-template.is-layout-flex){gap: 1.25em;}:where(.wp-block-post-template.is-layout-grid){gap: 1.25em;}.has-black-color{color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-color{color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-color{color: var(--wp--preset--color--white) !important;}.has-pale-pink-color{color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-color{color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-color{color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-color{color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-color{color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-color{color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-color{color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-color{color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-color{color: var(--wp--preset--color--vivid-purple) !important;}.has-black-background-color{background-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-background-color{background-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-background-color{background-color: var(--wp--preset--color--white) !important;}.has-pale-pink-background-color{background-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-background-color{background-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-background-color{background-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-background-color{background-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-background-color{background-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-background-color{background-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-background-color{background-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-background-color{background-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-background-color{background-color: var(--wp--preset--color--vivid-purple) !important;}.has-black-border-color{border-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-border-color{border-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-border-color{border-color: var(--wp--preset--color--white) !important;}.has-pale-pink-border-color{border-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-border-color{border-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-border-color{border-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-border-color{border-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-border-color{border-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-border-color{border-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-border-color{border-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-border-color{border-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-border-color{border-color: var(--wp--preset--color--vivid-purple) !important;}.has-vivid-cyan-blue-to-vivid-purple-gradient-background{background: var(--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple) !important;}.has-light-green-cyan-to-vivid-green-cyan-gradient-background{background: var(--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan) !important;}.has-luminous-vivid-amber-to-luminous-vivid-orange-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange) !important;}.has-luminous-vivid-orange-to-vivid-red-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-orange-to-vivid-red) !important;}.has-very-light-gray-to-cyan-bluish-gray-gradient-background{background: var(--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray) !important;}.has-cool-to-warm-spectrum-gradient-background{background: var(--wp--preset--gradient--cool-to-warm-spectrum) !important;}.has-blush-light-purple-gradient-background{background: var(--wp--preset--gradient--blush-light-purple) !important;}.has-blush-bordeaux-gradient-background{background: var(--wp--preset--gradient--blush-bordeaux) !important;}.has-luminous-dusk-gradient-background{background: var(--wp--preset--gradient--luminous-dusk) !important;}.has-pale-ocean-gradient-background{background: var(--wp--preset--gradient--pale-ocean) !important;}.has-electric-grass-gradient-background{background: var(--wp--preset--gradient--electric-grass) !important;}.has-midnight-gradient-background{background: var(--wp--preset--gradient--midnight) !important;}.has-small-font-size{font-size: var(--wp--preset--font-size--small) !important;}.has-medium-font-size{font-size: var(--wp--preset--font-size--medium) !important;}.has-large-font-size{font-size: var(--wp--preset--font-size--large) !important;}.has-x-large-font-size{font-size: var(--wp--preset--font-size--x-large) !important;} :where(.wp-block-post-template.is-layout-flex){gap: 1.25em;}:where(.wp-block-post-template.is-layout-grid){gap: 1.25em;} :where(.wp-block-columns.is-layout-flex){gap: 2em;}:where(.wp-block-columns.is-layout-grid){gap: 2em;} :root :where(.wp-block-pullquote){font-size: 1.5em;line-height: 1.6;} </style> <link rel='stylesheet' id='all-css-12' href='https://engineering.fb.com/_static/??-eJyNjt0KwjAMRl/ILm5FxAvxUaRLahftH0uH+PZ204HijXfJ4TtfAvesMMViY4HsJ8dRoCJHeZy5zJxYCszkDRoU2cCHWAYbrAAmsurSVxxeTs0BDuxJLYkmcPxxw6TWu1dbssGbanVzgJBo8rVUBjNaMkSPZeTo/q44c0SQhGy88skl+VrWb07h2O51t9W7VndPwmFiqw==' type='text/css' media='all' /> <script type="text/javascript" src="https://engineering.fb.com/wp-content/plugins/wp-gdpr-consent/dist/gdprconsent.js?ver=2.0.0" id="gdprconsent-js"></script> <script type="text/javascript" id="gdprconsent-js-after"> /* <![CDATA[ */ if (window.gdprSafeTrack) { window.gdprSafeTrack('https://www.googletagmanager.com/gtag/js?id=391063774'); window.gdprSafeTrack(function() { var google_analytics_g4 = decodeURIComponent( '391063774' ); window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', google_analytics_g4); }); } if (window.gdprSafeTrack) { window.gdprSafeTrack(function() { var google_tag_manager = decodeURIComponent( 'GTM-KZRLGZ8' ); (function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); })(window,document,'script','dataLayer',google_tag_manager); }); } if (window.gdprSafeTrack) { window.gdprSafeTrack(function() { var facebook_pixel = decodeURIComponent( '660742068067366' ); !function(f,b,e,v,n,t,s) {if(f.fbq)return;n=f.fbq=function(){n.callMethod? n.callMethod.apply(n,arguments):n.queue.push(arguments)}; if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0'; n.queue=[];t=b.createElement(e);t.async=!0; t.src=v;s=b.getElementsByTagName(e)[0]; s.parentNode.insertBefore(t,s)}(window, document,'script', 'https://connect.facebook.net/en_US/fbevents.js'); fbq('init', facebook_pixel); fbq('track', 'PageView'); }); } /* ]]> */ </script> <script type="text/javascript" src="https://engineering.fb.com/_static/??-eJx9y0EKgCAQheELZZZBraKzSA2l5DiNI9HtM2jRKnjwNt+vT1IO5z0vkLQvOzLw9V4dHNY+VfoPqeBWtgJfPEcUQNGyQShJxgU4CVt6aopEwC+fwtgOnTFN35jO3/exM/Y=" ></script><link rel="https://api.w.org/" href="https://engineering.fb.com/wp-json/" /><link rel="alternate" title="JSON" type="application/json" href="https://engineering.fb.com/wp-json/wp/v2/posts/21812" /><link rel="EditURI" type="application/rsd+xml" title="RSD" href="https://engineering.fb.com/xmlrpc.php?rsd" /> <meta name="generator" content="WordPress 6.7.1" /> <link rel='shortlink' href='https://wp.me/pa0Lhq-5FO' /> <link rel="alternate" title="oEmbed (JSON)" type="application/json+oembed" href="https://engineering.fb.com/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fengineering.fb.com%2F2024%2F10%2F22%2Fsecurity%2Fipls-privacy-preserving-storage-for-your-whatsapp-contacts%2F" /> <link rel="alternate" title="oEmbed (XML)" type="text/xml+oembed" href="https://engineering.fb.com/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fengineering.fb.com%2F2024%2F10%2F22%2Fsecurity%2Fipls-privacy-preserving-storage-for-your-whatsapp-contacts%2F&#038;format=xml" /> <link rel="preload" href="https://engineering.fb.com/wp-content/themes/code-fb-com/fonts/FacebookReader-Medium.woff2" as="font" type="font/woff2" crossorigin="anonymous"><link rel="preload" href="https://engineering.fb.com/wp-content/themes/code-fb-com/fonts/FacebookReader-Regular.woff2" as="font" type="font/woff2" crossorigin="anonymous"><link rel="preload" href="https://engineering.fb.com/wp-content/themes/code-fb-com/fonts/Optimistic_Display_W_Md.woff2" as="font" type="font/woff2" crossorigin="anonymous"> <!-- Jetpack Open Graph Tags --> <meta property="og:type" content="article" /> <meta property="og:title" content="IPLS: Privacy-preserving storage for your WhatsApp contacts" /> <meta property="og:url" content="https://engineering.fb.com/2024/10/22/security/ipls-privacy-preserving-storage-for-your-whatsapp-contacts/" /> <meta property="og:description" content="Your contact list is fundamental to the experiences you love and enjoy on WhatsApp. With contacts, you know which of your friends and family are on WhatsApp, you can easily message or call them, an…" /> <meta property="article:published_time" content="2024-10-22T12:59:46+00:00" /> <meta property="article:modified_time" content="2024-10-22T14:23:35+00:00" /> <meta property="og:site_name" content="Engineering at Meta" /> <meta property="og:image" content="https://engineering.fb.com/wp-content/uploads/2024/10/WhatsApp-IPLS-image-3_crop.png" /> <meta property="og:image:width" content="1920" /> <meta property="og:image:height" content="600" /> <meta property="og:image:alt" content="" /> <meta property="og:locale" content="en_US" /> <meta name="twitter:text:title" content="IPLS: Privacy-preserving storage for your WhatsApp contacts" /> <meta name="twitter:image" content="https://engineering.fb.com/wp-content/uploads/2024/10/WhatsApp-IPLS-image-3_crop.png?w=640" /> <meta name="twitter:card" content="summary_large_image" /> <!-- End Jetpack Open Graph Tags --> <link rel="shortcut icon" href="https://engineering.fb.com/wp-content/themes/code-fb-com/favicon.ico" /> </head> <body class="post-template-default single single-post postid-21812 single-format-standard group-blog"> <div class="hfeed site" id="page"> <!-- ******************* The Navbar Area ******************* --> <div class="wrapper-fluid wrapper-navbar" id="wrapper-navbar"> <a class="skip-link screen-reader-text sr-only" href="#content"> Skip to content </a> <nav class="navbar navbar-expand-std"> <div class="nav-container"> <!-- Your site title as branding in the menu --> <div class="nav-top-row"> <h1 class="navbar-brand mb-0"> <a rel="home" href="https://engineering.fb.com/" title="Engineering at Meta"> <img class="navbar-brand-logo" src="https://engineering.fb.com/wp-content/themes/code-fb-com/img/logo-meta.svg" class="navbar-brand-logo" alt="Engineering at Meta" width="215" height="40" loading="lazy"> </a> </h1> <!-- end custom logo --> <label for="search" class="screen-reader-text">Search this site</label> <input type="text" id="search" name="search" class="form-control-lg navbar-search" autocomplete="off"> <button class="navbar-toggler navbar-searchbar-toggler" type="button" data-toggle="collapse" data-target="#searchbarDropdown" aria-controls="searchbarDropdown" aria-expanded="false" aria-label="Toggle navigation"> <img src="https://engineering.fb.com/wp-content/themes/code-fb-com/img/icon-search.svg" class="navbar-mobile-search-icon" loading="lazy" width="24" height="25" /> </button> <!-- desktop language menu (mobile language menu is implemented via jQuery)--> <div class="notranslate nice-select navbar-language form-control"> </div> <button class="navbar-toggler collapsed navbar-menu-toggler" type="button" data-toggle="collapse" data-target="#navbarNavDropdown" aria-controls="navbarNavDropdown" aria-expanded="false" aria-label="Toggle navigation"> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> </button> </div> <div class="navbar-border"></div> <!-- The WordPress Menu goes here --> <div id="navbarNavDropdown" class="collapse navbar-collapse"><ul id="main-menu" class="navbar-nav"><li id="menu-item-60" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children nav-item menu-item-60 dropdown"><a title="Open Source" href="#" data-toggle="dropdown" class="nav-link dropdown-toggle">Open Source <span class="caret"></span><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" viewBox="0 0 129 129" enable-background="new 0 0 129 129" width="12px" height="15px"> <polyline points="40 50 80 90 120 50" stroke="#adb1b8" stroke-width="10" stroke-linecap="butt" fill="none" stroke-linejoin="miter"/> </svg></a> <ul class=" dropdown-menu" role="menu"> <li id="menu-item-12330" class="menu-item menu-item-type-taxonomy menu-item-object-category nav-item menu-item-12330"><a title="Open Source" href="https://engineering.fb.com/category/open-source/" class="nav-link">Open Source</a></li> <li id="menu-item-12331" class="menu-item menu-item-type-custom menu-item-object-custom nav-item menu-item-12331"><a title="Meta Open Source" href="https://opensource.fb.com" class="nav-link">Meta Open Source</a></li> </ul> </li> <li id="menu-item-2686" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children nav-item menu-item-2686 dropdown"><a title="Platforms" href="#" data-toggle="dropdown" class="nav-link dropdown-toggle">Platforms <span class="caret"></span><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" viewBox="0 0 129 129" enable-background="new 0 0 129 129" width="12px" height="15px"> <polyline points="40 50 80 90 120 50" stroke="#adb1b8" stroke-width="10" stroke-linecap="butt" fill="none" stroke-linejoin="miter"/> </svg></a> <ul class=" dropdown-menu" role="menu"> <li id="menu-item-65" class="menu-item menu-item-type-taxonomy menu-item-object-category nav-item menu-item-65"><a title="Android" href="https://engineering.fb.com/category/android/" class="nav-link">Android</a></li> <li id="menu-item-66" class="menu-item menu-item-type-taxonomy menu-item-object-category nav-item menu-item-66"><a title="iOS" href="https://engineering.fb.com/category/ios/" class="nav-link">iOS</a></li> <li id="menu-item-67" class="menu-item menu-item-type-taxonomy menu-item-object-category nav-item menu-item-67"><a title="Web" href="https://engineering.fb.com/category/web/" class="nav-link">Web</a></li> </ul> </li> <li id="menu-item-2682" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children nav-item menu-item-2682 dropdown"><a title="Infrastructure Systems" href="#" data-toggle="dropdown" class="nav-link dropdown-toggle">Infrastructure Systems <span class="caret"></span><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" viewBox="0 0 129 129" enable-background="new 0 0 129 129" width="12px" height="15px"> <polyline points="40 50 80 90 120 50" stroke="#adb1b8" stroke-width="10" stroke-linecap="butt" fill="none" stroke-linejoin="miter"/> </svg></a> <ul class=" dropdown-menu" role="menu"> <li id="menu-item-218" class="menu-item menu-item-type-taxonomy menu-item-object-category nav-item menu-item-218"><a title="Core Infra" href="https://engineering.fb.com/category/core-infra/" class="nav-link">Core Infra</a></li> <li id="menu-item-219" class="menu-item menu-item-type-taxonomy menu-item-object-category nav-item menu-item-219"><a title="Data Infrastructure" href="https://engineering.fb.com/category/data-infrastructure/" class="nav-link">Data Infrastructure</a></li> <li id="menu-item-220" class="menu-item menu-item-type-taxonomy menu-item-object-category nav-item menu-item-220"><a title="DevInfra" href="https://engineering.fb.com/category/developer-tools/" class="nav-link">DevInfra</a></li> <li id="menu-item-226" class="menu-item menu-item-type-taxonomy menu-item-object-category nav-item menu-item-226"><a title="Production Engineering" href="https://engineering.fb.com/category/production-engineering/" class="nav-link">Production Engineering</a></li> <li id="menu-item-227" class="menu-item menu-item-type-taxonomy menu-item-object-category current-post-ancestor current-menu-parent current-post-parent nav-item menu-item-227"><a title="Security" href="https://engineering.fb.com/category/security/" class="nav-link">Security</a></li> <li id="menu-item-18607" class="menu-item menu-item-type-custom menu-item-object-custom nav-item menu-item-18607"><a title="Research Publications" href="https://research.facebook.com/publications/research-areas/systems-infrastructure/" class="nav-link">Research Publications</a></li> </ul> </li> <li id="menu-item-2683" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children nav-item menu-item-2683 dropdown"><a title="Physical Infrastructure" href="#" data-toggle="dropdown" class="nav-link dropdown-toggle">Physical Infrastructure <span class="caret"></span><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" viewBox="0 0 129 129" enable-background="new 0 0 129 129" width="12px" height="15px"> <polyline points="40 50 80 90 120 50" stroke="#adb1b8" stroke-width="10" stroke-linecap="butt" fill="none" stroke-linejoin="miter"/> </svg></a> <ul class=" dropdown-menu" role="menu"> <li id="menu-item-215" class="menu-item menu-item-type-taxonomy menu-item-object-category nav-item menu-item-215"><a title="Connectivity" href="https://engineering.fb.com/category/connectivity/" class="nav-link">Connectivity</a></li> <li id="menu-item-216" class="menu-item menu-item-type-taxonomy menu-item-object-category nav-item menu-item-216"><a title="Data Center Engineering" href="https://engineering.fb.com/category/data-center-engineering/" class="nav-link">Data Center Engineering</a></li> <li id="menu-item-217" class="menu-item menu-item-type-taxonomy menu-item-object-category nav-item menu-item-217"><a title="Networking &amp; Traffic" href="https://engineering.fb.com/category/networking-traffic/" class="nav-link">Networking &amp; Traffic</a></li> <li id="menu-item-18608" class="menu-item menu-item-type-custom menu-item-object-custom nav-item menu-item-18608"><a title="Research Publications" href="https://research.facebook.com/publications/research-areas/networking-connectivity/" class="nav-link">Research Publications</a></li> </ul> </li> <li id="menu-item-2684" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children nav-item menu-item-2684 dropdown"><a title="Video Engineering &amp; AR/VR" href="#" data-toggle="dropdown" class="nav-link dropdown-toggle">Video Engineering &#038; AR/VR <span class="caret"></span><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" viewBox="0 0 129 129" enable-background="new 0 0 129 129" width="12px" height="15px"> <polyline points="40 50 80 90 120 50" stroke="#adb1b8" stroke-width="10" stroke-linecap="butt" fill="none" stroke-linejoin="miter"/> </svg></a> <ul class=" dropdown-menu" role="menu"> <li id="menu-item-225" class="menu-item menu-item-type-taxonomy menu-item-object-category nav-item menu-item-225"><a title="Video Engineering" href="https://engineering.fb.com/category/video-engineering/" class="nav-link">Video Engineering</a></li> <li id="menu-item-223" class="menu-item menu-item-type-taxonomy menu-item-object-category nav-item menu-item-223"><a title="Virtual Reality" href="https://engineering.fb.com/category/virtual-reality/" class="nav-link">Virtual Reality</a></li> <li id="menu-item-13388" class="menu-item menu-item-type-custom menu-item-object-custom nav-item menu-item-13388"><a title="Research Publications" href="https://research.facebook.com/publications/research-areas/augmented-reality-virtual-reality/" class="nav-link">Research Publications</a></li> </ul> </li> <li id="menu-item-2685" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children nav-item menu-item-2685 dropdown"><a title="Artificial Intelligence" href="#" data-toggle="dropdown" class="nav-link dropdown-toggle">Artificial Intelligence <span class="caret"></span><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" viewBox="0 0 129 129" enable-background="new 0 0 129 129" width="12px" height="15px"> <polyline points="40 50 80 90 120 50" stroke="#adb1b8" stroke-width="10" stroke-linecap="butt" fill="none" stroke-linejoin="miter"/> </svg></a> <ul class=" dropdown-menu" role="menu"> <li id="menu-item-222" class="menu-item menu-item-type-taxonomy menu-item-object-category nav-item menu-item-222"><a title="ML Applications" href="https://engineering.fb.com/category/ml-applications/" class="nav-link">ML Applications</a></li> <li id="menu-item-221" class="menu-item menu-item-type-taxonomy menu-item-object-category nav-item menu-item-221"><a title="AI Research" href="https://engineering.fb.com/category/ai-research/" class="nav-link">AI Research</a></li> <li id="menu-item-13387" class="menu-item menu-item-type-custom menu-item-object-custom nav-item menu-item-13387"><a title="Research Publications" href="https://ai.facebook.com/results/?content_types%5B0%5D=publication" class="nav-link">Research Publications</a></li> </ul> </li> <li id="menu-item-228" class="menu-item menu-item-type-custom menu-item-object-custom nav-item menu-item-228"><a title="Watch Videos" href="/videos" class="nav-link">Watch Videos</a></li> </ul></div> </div><!-- .container --> <div class="search-container collapse" id="searchbarDropdown"> <div class="searchbar-search"> <div class="searchbar-container"> <div class="navbar-mobile-search-margin"></div> <input type="text" name="search" placeholder="Search" class="form-control-lg navbar-mobile-search" autofocus autocomplete="off"> <button class="searchbar-clear"> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> </button> </div> </div> </div> </nav><!-- .site-navigation --> </div><!-- .wrapper-navbar end --> <div class="wrapper" id="single-wrapper"> <div class="single-container row" id="content" tabindex="-1"> <!-- Do the left sidebar check. --> <div class="content-area" id="primary"> <main class="site-main" id="main"> <article class="post-21812 post type-post status-publish format-standard has-post-thumbnail hentry category-security tag-whatsapp" id="post-21812"> <header class="entry-header"> <div class="entry-meta"> POSTED ON <span class="posted-on entry-date"><time class="published updated" datetime="2024-10-22">OCTOBER 22, 2024</time></span> TO <span class="cat-links"><a href="https://engineering.fb.com/category/security/" rel="category tag">Security</a></span> <h1 class="entry-title"><div>IPLS: Privacy-preserving storage for your WhatsApp contacts</div></h1> </div><!-- .entry-meta --> </header><!-- .entry-header --> <figure id="post-feat-image-container"> <img width="1920" height="600" src="https://engineering.fb.com/wp-content/uploads/2024/10/WhatsApp-IPLS-image-3_crop.png" class="wp-post-image" alt="" /> </figure> <div class="entry-authors-social"> <div class="entry-authors"> By <a href="https://engineering.fb.com/author/slavik-krassovsky/" title="Posts by Slavik Krassovsky" class="author url fn" rel="author">Slavik Krassovsky</a>, <a href="https://engineering.fb.com/author/kevin-lewi/" title="Posts by Kevin Lewi" class="author url fn" rel="author">Kevin Lewi</a>, <a href="https://engineering.fb.com/author/dillon-george/" title="Posts by Dillon George" class="author url fn" rel="author">Dillon George</a>, <a href="https://engineering.fb.com/author/cheng-tian/" title="Posts by Cheng Tian" class="author url fn" rel="author">Cheng Tian</a>, <a href="https://engineering.fb.com/author/ercan-ozturk/" title="Posts by Ercan Ozturk" class="author url fn" rel="author">Ercan Ozturk</a> </div> <div class="entry-social"> <div class="entry-facebook"> <button onclick="return fbShare()" aria-label="Share this post on Facebook"> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M9 8h-3v4h3v12h5v-12h3.642l.358-4h-4v-1.667c0-.955.192-1.333 1.115-1.333h2.885v-5h-3.808c-3.596 0-5.192 1.583-5.192 4.615v3.385z"/></svg> </button> </div> <div class="entry-twitter"> <button onclick="return twitterSharePopup('https://engineering.fb.com/2024/10/22/security/ipls-privacy-preserving-storage-for-your-whatsapp-contacts/')" aria-label="Share this post on Twitter"> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24"><path d="M24 4.557c-.883.392-1.832.656-2.828.775 1.017-.609 1.798-1.574 2.165-2.724-.951.564-2.005.974-3.127 1.195-.897-.957-2.178-1.555-3.594-1.555-3.179 0-5.515 2.966-4.797 6.045-4.091-.205-7.719-2.165-10.148-5.144-1.29 2.213-.669 5.108 1.523 6.574-.806-.026-1.566-.247-2.229-.616-.054 2.281 1.581 4.415 3.949 4.89-.693.188-1.452.232-2.224.084.626 1.956 2.444 3.379 4.6 3.419-2.07 1.623-4.678 2.348-7.29 2.04 2.179 1.397 4.768 2.212 7.548 2.212 9.142 0 14.307-7.721 13.995-14.646.962-.695 1.797-1.562 2.457-2.549z"/></svg> </button> </div> <div class="entry-hacker-news"> <button onclick="return shareHackerNews('https://engineering.fb.com/2024/10/22/security/ipls-privacy-preserving-storage-for-your-whatsapp-contacts/')" aria-label="Share this post on Hacker News"> <svg width="24" height="24" xmlns="http://www.w3.org/2000/svg"><path d="M13.693 14.659L21.507 0h-3.29l-4.612 9.165c-.47.94-.901 1.841-1.293 2.703l-1.234-2.703L6.525 0H3l7.726 14.482V24h2.967v-9.341z" fill-rule="nonzero"/></svg> </button> </div> </div> </div> <div class="entry-content"> <p><span style="font-weight: 400;">Your contact list is fundamental to the experiences you love and enjoy on WhatsApp. With contacts, you know which of your friends and family are on WhatsApp, you can easily message or call them, and it helps give you context on who is in your groups. But losing your phone could mean losing your contact list as well. Traditionally, WhatsApp has lacked the ability to store your contact list in a way that can be easily and automatically restored in the event you lose it. What’s more, the only place you were able to add contacts was from your mobile device, by either typing in a phone number or scanning a QR code.</span></p> <p><span style="font-weight: 400;">As part of WhatsApp&#8217;s new feature to privately add and manage your contacts on WhatsApp across linked devices, we&#8217;re announcing a novel encrypted storage system we’ve designed called Identity Proof Linked Storage (IPLS). IPLS allows you to save your contacts and automatically restore them directly through WhatsApp. With IPLS in place, you can now create contacts directly within WhatsApp and choose to sync them to your phone or securely save them only to WhatsApp – giving you the ability to create contacts that are specific to your account. If you use linked devices, this also allows you to add and manage contacts seamlessly regardless of which device you’re on.</span></p> <p><span style="font-weight: 400;">Additionally, if you have multiple accounts on the same phone, such as a work and personal account, you can now customize your contact list for each account. If you lose your phone, your contact list can be restored on a newly registered device. </span></p> <p><span style="font-weight: 400;">Contact names are stored encrypted within WhatsApp, and we’ve built this with additional, robust protections by using IPLS to deter access to contacts to anyone except the user.</span></p> <p><span style="font-weight: 400;">IPLS incorporates new privacy technology that protects your contact lists in a privacy-preserving fashion. To further ensure the safety and security of this system, we’ve </span><a href="https://www.cloudflare.com/press-releases/2024/cloudflare-helps-secure-the-worlds-most-popular-messaging-applications/"><span style="font-weight: 400;">partnered with Cloudflare</span></a><span style="font-weight: 400;"> to provide</span><a href="https://blog.cloudflare.com/key-transparency/"><span style="font-weight: 400;"> independent third-party auditing</span></a><span style="font-weight: 400;"> of its cryptographic properties. The new technology stack was reviewed by external researchers and NCC Group Cryptography Services, an independent cybersecurity consultancy. </span></p> <h2>What is Identity Proof Linked Storage?</h2> <p><span style="font-weight: 400;">IPLS is a novel system at WhatsApp that allows users to store their contact names in an encrypted way. IPLS allows the client device to save the contact information using a strong encryption key generated on the client device. Its retrieval is based on the client authenticating its primary device identity.</span></p> <p><span style="font-weight: 400;">IPLS is based on two existing pieces of technology that are already used at scale by WhatsApp: </span><a href="https://engineering.fb.com/2023/04/13/security/whatsapp-key-transparency/" target="_blank" rel="noopener"><span style="font-weight: 400;">key transparency</span></a><span style="font-weight: 400;"> and our <a href="https://engineering.fb.com/2021/09/10/security/whatsapp-e2ee-backups/" target="_blank" rel="noopener">hardware security module (HSM)</a>. </span></p> <p><span style="font-weight: 400;">Certain events associated with your phone’s WhatsApp application (such as installing or reinstalling) trigger the creation of a new cryptographic keypair that is associated with your phone number. WhatsApp’s key transparency system publishes records of these primary device identity key changes to an append-only, cryptographic </span><a href="https://github.com/facebook/akd/" target="_blank" rel="noopener"><span style="font-weight: 400;">Auditable Key Directory (AKD)</span></a><span style="font-weight: 400;"> that allows WhatsApp clients to automatically verify a user’s encryption key. </span></p> <p><span style="font-weight: 400;">Key transparency allows WhatsApp, and the public at large, to cryptographically verify if a given phone number used for a WhatsApp account is tied to a given identity key.</span></p> <p><span style="font-weight: 400;">The HSMs are employed by </span><a href="https://www.whatsapp.com/security/WhatsApp_Security_Encrypted_Backups_Whitepaper.pdf" target="_blank" rel="noopener"><span style="font-weight: 400;">WhatsApp end-to-end encrypted backups</span></a><span style="font-weight: 400;"> and allow for private, tamper-resistant execution of application logic within WhatsApp data centers in a privacy-preserving way. Data processing within HSM’s security boundary remains opaque even to WhatsApp insiders with the highest privilege and physical access to the hardware. </span></p> <h2><span style="font-weight: 400;">The components of IPLS</span></h2> <h3><span style="font-weight: 400;">The AKD and Cloudflare integration</span></h3> <p><span style="font-weight: 400;">As mentioned, the first building block of IPLS is WhatsApp’s AKD, which maps a client phone number to a client identity key. Primary device identity is used to authenticate the client to ensure that only the owner of the contact encryption key is allowed to restore the contacts.</span></p> <p><span style="font-weight: 400;">To strengthen the single instance nature of AKD, </span><a href="https://blog.cloudflare.com/key-transparency/" target="_blank" rel="noopener"><span style="font-weight: 400;">WhatsApp has engaged Cloudflare</span></a><span style="font-weight: 400;"> to act as an additional witness of the additions to AKD. Cloudflare digitally signs each epoch, and associated root hash, and returns a digital signature validation confirming that the directory was not tampered with. The HSM-based Key Vault validates Cloudflare signature using Cloudflare’s public key.</span></p> <p><span style="font-weight: 400;">WhatsApp relies on the availability of the Cloudflare signing service and cannot proceed with the updates to AKD in the absence of the digital signature of each update.</span></p> <p><img decoding="async" class="aligncenter size-large wp-image-21822" src="https://engineering.fb.com/wp-content/uploads/2024/10/WhatsApp-IPLS-image-1_crop-Copy.png?w=1024" alt="" width="1024" height="320" srcset="https://engineering.fb.com/wp-content/uploads/2024/10/WhatsApp-IPLS-image-1_crop-Copy.png 1920w, https://engineering.fb.com/wp-content/uploads/2024/10/WhatsApp-IPLS-image-1_crop-Copy.png?resize=916,286 916w, https://engineering.fb.com/wp-content/uploads/2024/10/WhatsApp-IPLS-image-1_crop-Copy.png?resize=768,240 768w, https://engineering.fb.com/wp-content/uploads/2024/10/WhatsApp-IPLS-image-1_crop-Copy.png?resize=1024,320 1024w, https://engineering.fb.com/wp-content/uploads/2024/10/WhatsApp-IPLS-image-1_crop-Copy.png?resize=1536,480 1536w, https://engineering.fb.com/wp-content/uploads/2024/10/WhatsApp-IPLS-image-1_crop-Copy.png?resize=96,30 96w, https://engineering.fb.com/wp-content/uploads/2024/10/WhatsApp-IPLS-image-1_crop-Copy.png?resize=192,60 192w" sizes="(max-width: 992px) 100vw, 62vw" /></p> <p><span style="font-weight: 400;">In addition, WhatsApp provides auditable proofs of consistency for the transitions between epochs. The auditable proofs are published to a write-once, read-many enabled Amazon S3 instance, which has a public interface for any entity to retrieve the proofs.</span></p> <p><span style="font-weight: 400;">Using AKD and partnering with Cloudflare ensures that there is only a single instance of the directory that is validated by a 3rd party.</span></p> <h3><span style="font-weight: 400;">HSM-based key storage</span></h3> <p><span style="font-weight: 400;">To ensure privacy for user contacts registered on WhatsApp, contact names are first encrypted using a symmetric encryption key generated by the user’s device, and then stored in the HSM-based Key Vault. Storage and retrieval of the contact encryption key occurs via an end-to-end encrypted channel between the client and the HSM-based Key Vault, ensuring that the data in transit remains opaque to WhatsApp.  </span></p> <p><img decoding="async" class="aligncenter size-large wp-image-21823" src="https://engineering.fb.com/wp-content/uploads/2024/10/WhatsApp-IPLS-image-2_crop.png?w=1024" alt="" width="1024" height="320" srcset="https://engineering.fb.com/wp-content/uploads/2024/10/WhatsApp-IPLS-image-2_crop.png 1920w, https://engineering.fb.com/wp-content/uploads/2024/10/WhatsApp-IPLS-image-2_crop.png?resize=916,286 916w, https://engineering.fb.com/wp-content/uploads/2024/10/WhatsApp-IPLS-image-2_crop.png?resize=768,240 768w, https://engineering.fb.com/wp-content/uploads/2024/10/WhatsApp-IPLS-image-2_crop.png?resize=1024,320 1024w, https://engineering.fb.com/wp-content/uploads/2024/10/WhatsApp-IPLS-image-2_crop.png?resize=1536,480 1536w, https://engineering.fb.com/wp-content/uploads/2024/10/WhatsApp-IPLS-image-2_crop.png?resize=96,30 96w, https://engineering.fb.com/wp-content/uploads/2024/10/WhatsApp-IPLS-image-2_crop.png?resize=192,60 192w" sizes="(max-width: 992px) 100vw, 62vw" /></p> <p><span style="font-weight: 400;">Storing the contact key in the HSM-based Key Vault ensures its availability even when the user loses their phone. If a user loses their client device and wants to restore their contacts, the new client device can retrieve the contact key by establishing a secure session with the HSM-based Key Vault. The Key Vault verifies the client identity key by accessing AKD via a secure cryptographic protocol and verifying that the client has the corresponding private key.</span></p> <p><img loading="lazy" decoding="async" class="aligncenter size-large wp-image-21824" src="https://engineering.fb.com/wp-content/uploads/2024/10/WhatsApp-IPLS-image-3_crop.png?w=1024" alt="" width="1024" height="320" srcset="https://engineering.fb.com/wp-content/uploads/2024/10/WhatsApp-IPLS-image-3_crop.png 1920w, https://engineering.fb.com/wp-content/uploads/2024/10/WhatsApp-IPLS-image-3_crop.png?resize=916,286 916w, https://engineering.fb.com/wp-content/uploads/2024/10/WhatsApp-IPLS-image-3_crop.png?resize=768,240 768w, https://engineering.fb.com/wp-content/uploads/2024/10/WhatsApp-IPLS-image-3_crop.png?resize=1024,320 1024w, https://engineering.fb.com/wp-content/uploads/2024/10/WhatsApp-IPLS-image-3_crop.png?resize=1536,480 1536w, https://engineering.fb.com/wp-content/uploads/2024/10/WhatsApp-IPLS-image-3_crop.png?resize=96,30 96w, https://engineering.fb.com/wp-content/uploads/2024/10/WhatsApp-IPLS-image-3_crop.png?resize=192,60 192w" sizes="auto, (max-width: 992px) 100vw, 62vw" /></p> <p><span style="font-weight: 400;">Once the client is verified, the new client is allowed to access the contact key in the HSM-based Key Vault using the secure channel established with the client identity key and the HSM key.</span></p> <h2>Privacy-preserving contacts storage at WhatsApp scale</h2> <p><span style="font-weight: 400;">IPLS is a new system that deters unauthorized access to sensitive data by effectively coupling any data access to publicly auditable identity key changes published to WhatsApp’s key transparency infrastructure. This approach is similar to how a QR code scanning technology can be used to detect a public key compromise in an </span><a href="https://faq.whatsapp.com/820124435853543" target="_blank" rel="noopener"><span style="font-weight: 400;">end-to-end encrypted messaging</span></a><span style="font-weight: 400;"> system.</span></p> <p><span style="font-weight: 400;">WhatsApp’s new approach on contacts will give users more ways to easily manage contacts across devices and accounts and store them securely without losing them if they change phones or reinstall WhatsApp. We’re excited about how IPLS has helped enable this new feature and will help ensure WhatsApp contacts are encrypted and can easily move with users when they get a new phone. </span></p> <div class="sharedaddy sd-sharing-enabled"><div class="robots-nocontent sd-block sd-social sd-social-icon-text sd-sharing"><h3 class="sd-title">Share this:</h3><div class="sd-content"><ul><li class="share-facebook"><a rel="nofollow noopener noreferrer" data-shared="sharing-facebook-21812" class="share-facebook sd-button share-icon" href="https://engineering.fb.com/2024/10/22/security/ipls-privacy-preserving-storage-for-your-whatsapp-contacts/?share=facebook" target="_blank" title="Click to share on Facebook" ><span>Facebook</span></a></li><li class="share-custom share-custom-threads"><a rel="nofollow noopener noreferrer" data-shared="" class="share-custom share-custom-threads sd-button share-icon" href="https://engineering.fb.com/2024/10/22/security/ipls-privacy-preserving-storage-for-your-whatsapp-contacts/?share=custom-1706294701" target="_blank" title="Click to share on Threads" ><span style="background-image:url(&quot;https://engineering.fb.com/wp-content/uploads/2024/01/threads-app-icon.png&quot;);">Threads</span></a></li><li class="share-x"><a rel="nofollow noopener noreferrer" data-shared="sharing-x-21812" class="share-x sd-button share-icon" href="https://engineering.fb.com/2024/10/22/security/ipls-privacy-preserving-storage-for-your-whatsapp-contacts/?share=x" target="_blank" title="Click to share on X" ><span>X</span></a></li><li class="share-linkedin"><a rel="nofollow noopener noreferrer" data-shared="sharing-linkedin-21812" class="share-linkedin sd-button share-icon" href="https://engineering.fb.com/2024/10/22/security/ipls-privacy-preserving-storage-for-your-whatsapp-contacts/?share=linkedin" target="_blank" title="Click to share on LinkedIn" ><span>LinkedIn</span></a></li><li class="share-custom share-custom-hackernews"><a rel="nofollow noopener noreferrer" data-shared="" class="share-custom share-custom-hackernews sd-button share-icon" href="https://engineering.fb.com/2024/10/22/security/ipls-privacy-preserving-storage-for-your-whatsapp-contacts/?share=custom-1699562127" target="_blank" title="Click to share on Hacker News" ><span style="background-image:url(&quot;https://news.ycombinator.com/y18.svg&quot;);">Hacker News</span></a></li><li class="share-email"><a rel="nofollow noopener noreferrer" data-shared="" class="share-email sd-button share-icon" href="mailto:?subject=%5BShared%20Post%5D%20IPLS%3A%20Privacy-preserving%20storage%20for%20your%20WhatsApp%20contacts&body=https%3A%2F%2Fengineering.fb.com%2F2024%2F10%2F22%2Fsecurity%2Fipls-privacy-preserving-storage-for-your-whatsapp-contacts%2F&share=email" target="_blank" title="Click to email a link to a friend" data-email-share-error-title="Do you have email set up?" data-email-share-error-text="If you&#039;re having problems sharing via email, you might not have email set up for your browser. You may need to create a new email yourself." data-email-share-nonce="8530640154" data-email-share-track-url="https://engineering.fb.com/2024/10/22/security/ipls-privacy-preserving-storage-for-your-whatsapp-contacts/?share=email"><span>Email</span></a></li><li class="share-end"></li></ul></div></div></div> </div><!-- .entry-content --> </article><!-- #post-## --> <footer class="entry-footer"> <div>TAGS: &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a href="https://engineering.fb.com/tag/whatsapp/" rel="tag">WhatsApp</a></div> </footer><!-- .entry-footer --> <div class="fb-like" data-href="https://engineering.fb.com/2024/10/22/security/ipls-privacy-preserving-storage-for-your-whatsapp-contacts/" data-width="" data-layout="standard" data-action="like" data-size="small" data-share="true"> </div> <div class="related-articles"> <div class="related-articles__header"> <h3 class="related-articles__header__headline">Read More in Security</h3> <a aria-label="View all articles in this Security" class="related-articles__header__link" href="https://engineering.fb.com/category/security/" > View All </a> </div> <div class="article-grids related-articles__grid"> <div class="row"> <div class="article-grid col-12 col-md-4"> <article class="post post-21812 type-post status-publish format-standard has-post-thumbnail hentry category-security tag-whatsapp" id="post-21935"> <img width="580" height="326" src="https://engineering.fb.com/wp-content/uploads/2024/11/Eng-Blog-Self-Serve-Hero-Images-PRIVACY-103-Teale-x2_small.png?w=580&amp;h=326&amp;crop=1" class="attachment-thumbnail size-thumbnail" alt="" loading="lazy" /> <header class="entry-header"> <div class="entry-header__top"> <span class="posted-on"> <time class="entry-date published" datetime="2024-11-12T09:00:10-08:00"> NOV 12, 2024 </time> </span> </div> <div class="entry-title"> <div> <a href="https://engineering.fb.com/2024/11/12/security/how-meta-built-large-scale-cryptographic-monitoring/" rel="bookmark" aria-label="Read More about How Meta built large-scale cryptographic monitoring"> How Meta built large-scale cryptographic monitoring </a> </div> </div> </header><!-- .entry-header --> </article><!-- #post-## --> </div><!-- /.article-grid --> <div class="article-grid col-12 col-md-4"> <article class="post post-21812 type-post status-publish format-standard has-post-thumbnail hentry category-security tag-whatsapp" id="post-21662"> <img width="580" height="326" src="https://engineering.fb.com/wp-content/uploads/2024/08/Meta-Tech-Podcast-Post-quantum-readiness.webp?w=580&amp;h=326&amp;crop=1" class="attachment-thumbnail size-thumbnail" alt="" loading="lazy" /> <header class="entry-header"> <div class="entry-header__top"> <span class="posted-on"> <time class="entry-date published" datetime="2024-08-28T09:19:35-07:00"> AUG 28, 2024 </time> </span> </div> <div class="entry-title"> <div> <a href="https://engineering.fb.com/2024/08/28/security/post-quantum-cryptography-meta/" rel="bookmark" aria-label="Read More about Meta is getting ready for post-quantum cryptography"> Meta is getting ready for post-quantum cryptography </a> </div> </div> </header><!-- .entry-header --> </article><!-- #post-## --> </div><!-- /.article-grid --> <div class="article-grid col-12 col-md-4"> <article class="post post-21812 type-post status-publish format-standard has-post-thumbnail hentry category-security tag-whatsapp" id="post-21618"> <img width="580" height="326" src="https://engineering.fb.com/wp-content/uploads/2024/08/PAI-EngFair-Blog-Header-Final.png?w=580&amp;h=326&amp;crop=1" class="attachment-thumbnail size-thumbnail" alt="" loading="lazy" /> <header class="entry-header"> <div class="entry-header__top"> <span class="posted-on"> <time class="entry-date published" datetime="2024-08-27T09:00:50-07:00"> AUG 27, 2024 </time> </span> </div> <div class="entry-title"> <div> <a href="https://engineering.fb.com/2024/08/27/security/privacy-aware-infrastructure-purpose-limitation-meta/" rel="bookmark" aria-label="Read More about How Meta enforces purpose limitation via Privacy Aware Infrastructure at scale"> How Meta enforces purpose limitation via Privacy Aware Infrastructure at scale </a> </div> </div> </header><!-- .entry-header --> </article><!-- #post-## --> </div><!-- /.article-grid --> <div class="article-grid col-12 col-md-4"> <article class="post post-21812 type-post status-publish format-standard has-post-thumbnail hentry category-security tag-whatsapp" id="post-21222"> <img width="580" height="326" src="https://engineering.fb.com/wp-content/uploads/2024/05/Eng-Blog-Self-Serve-Hero-Images-PRIVACY-103-Orange.jpg?w=580&amp;h=326&amp;crop=1" class="attachment-thumbnail size-thumbnail" alt="" loading="lazy" title="Eng-Blog-Self-Serve-Hero-Images-PRIVACY-103-Orange" /> <header class="entry-header"> <div class="entry-header__top"> <span class="posted-on"> <time class="entry-date published" datetime="2024-05-22T09:35:59-07:00"> MAY 22, 2024 </time> </span> </div> <div class="entry-title"> <div> <a href="https://engineering.fb.com/2024/05/22/security/post-quantum-readiness-tls-pqr-meta/" rel="bookmark" aria-label="Read More about Post-quantum readiness for TLS at Meta"> Post-quantum readiness for TLS at Meta </a> </div> </div> </header><!-- .entry-header --> </article><!-- #post-## --> </div><!-- /.article-grid --> <div class="article-grid col-12 col-md-4"> <article class="post post-21812 type-post status-publish format-standard has-post-thumbnail hentry category-security tag-whatsapp" id="post-20955"> <img width="580" height="326" src="https://engineering.fb.com/wp-content/uploads/2024/03/Woman-with-smartphone_EU-flag_smaller.jpg?w=580&amp;h=326&amp;crop=1" class="attachment-thumbnail size-thumbnail" alt="" loading="lazy" /> <header class="entry-header"> <div class="entry-header__top"> <span class="posted-on"> <time class="entry-date published" datetime="2024-03-06T01:00:14-08:00"> MAR 6, 2024 </time> </span> </div> <div class="entry-title"> <div> <a href="https://engineering.fb.com/2024/03/06/security/whatsapp-messenger-messaging-interoperability-eu/" rel="bookmark" aria-label="Read More about Making messaging interoperability with third parties safe for users in Europe"> Making messaging interoperability with third parties safe for users in Europe </a> </div> </div> </header><!-- .entry-header --> </article><!-- #post-## --> </div><!-- /.article-grid --> <div class="article-grid col-12 col-md-4"> <article class="post post-21812 type-post status-publish format-standard has-post-thumbnail hentry category-security tag-whatsapp" id="post-20811"> <img width="580" height="326" src="https://engineering.fb.com/wp-content/uploads/2023/08/Eng-Blog-Self-Serve-Hero-Images-PRIVACY-103-Navy-1.jpg?w=580&amp;h=326&amp;crop=1" class="attachment-thumbnail size-thumbnail" alt="" loading="lazy" title="Eng-Blog-Self-Serve-Hero-Images-PRIVACY-103-Navy (1)" /> <header class="entry-header"> <div class="entry-header__top"> <span class="posted-on"> <time class="entry-date published" datetime="2023-12-06T18:00:08-08:00"> DEC 6, 2023 </time> </span> </div> <div class="entry-title"> <div> <a href="https://engineering.fb.com/2023/12/06/security/building-end-to-end-security-for-messenger/" rel="bookmark" aria-label="Read More about Building end-to-end security for Messenger"> Building end-to-end security for Messenger </a> </div> </div> </header><!-- .entry-header --> </article><!-- #post-## --> </div><!-- /.article-grid --> </div><!-- /.row --> </div><!--/.article-grids --> </div><!-- /.related-articles --> <!-- include the carousel nav here. --> </main><!-- #main --> </div><!-- #primary --> <!-- Do the right sidebar check. --> <div class="col-md-4 widget-area" id="right-sidebar" role="complementary"> <aside id="fb_related_post_widget-4" class="widget widget_fb_related_post_widget"><h3 class="widget-title">Related Posts</h3><hr> <div class="aside-related-projects"><div class="article-grid-redesign"> <article class="post-20224 post type-post status-publish has-post-thumbnail hentry" id="post-20224"> <a href="https://engineering.fb.com/2023/04/13/security/whatsapp-key-transparency/" rel="bookmark" aria-label="Read More about Deploying key transparency at WhatsApp"> <img width="580" height="326" src="https://engineering.fb.com/wp-content/uploads/2023/04/Eng-Blog-Self-Serve-Hero-Images-PRIVACY-101-TealeLight.jpg?w=580&#038;h=326&#038;crop=1" class="wp-post-image" alt="" srcset="https://engineering.fb.com/wp-content/uploads/2023/04/Eng-Blog-Self-Serve-Hero-Images-PRIVACY-101-TealeLight.jpg?w=580&#038;h=326&#038;crop=1 580w, https://engineering.fb.com/wp-content/uploads/2023/04/Eng-Blog-Self-Serve-Hero-Images-PRIVACY-101-TealeLight.jpg?w=580&#038;h=326&#038;crop=1 326w" sizes="(max-width: 580px) 100vw, 580px" loading="lazy"> <header class="entry-header"> <span class="posted-on"><time class="entry-date published" datetime="Apr 13, 2023">Apr 13, 2023</time></span> <h4 class="entry-title">Deploying key transparency at WhatsApp</h4> </header><!-- .entry-header --> </a> </article><!-- #post-## --> </div><div class="article-grid-redesign"> <article class="post-18065 post type-post status-publish has-post-thumbnail hentry" id="post-18065"> <a href="https://engineering.fb.com/2021/09/10/security/whatsapp-e2ee-backups/" rel="bookmark" aria-label="Read More about How WhatsApp is enabling end-to-end encrypted backups"> <img width="580" height="326" src="https://engineering.fb.com/wp-content/uploads/2021/09/Whatsapp_E2EE-Backups_EngBlog-1.png?w=580&#038;h=326&#038;crop=1" class="wp-post-image" alt="" srcset="https://engineering.fb.com/wp-content/uploads/2021/09/Whatsapp_E2EE-Backups_EngBlog-1.png?w=580&#038;h=326&#038;crop=1 580w, https://engineering.fb.com/wp-content/uploads/2021/09/Whatsapp_E2EE-Backups_EngBlog-1.png?w=580&#038;h=326&#038;crop=1 326w" sizes="(max-width: 580px) 100vw, 580px" loading="lazy"> <header class="entry-header"> <span class="posted-on"><time class="entry-date published" datetime="Sep 10, 2021">Sep 10, 2021</time></span> <h4 class="entry-title">How WhatsApp is enabling end-to-end encrypted backups</h4> </header><!-- .entry-header --> </a> </article><!-- #post-## --> </div><div class="article-grid-redesign"> <article class="post-20757 post type-post status-publish has-post-thumbnail hentry" id="post-20757"> <a href="https://engineering.fb.com/2023/11/08/security/whatsapp-calls-enhancing-security/" rel="bookmark" aria-label="Read More about Enhancing the security of WhatsApp calls"> <img width="580" height="326" src="https://engineering.fb.com/wp-content/uploads/2023/11/English_New-Security-Protections-in-WhatsApp-Calling.png?w=580&#038;h=326&#038;crop=1" class="wp-post-image" alt="" srcset="https://engineering.fb.com/wp-content/uploads/2023/11/English_New-Security-Protections-in-WhatsApp-Calling.png?w=580&#038;h=326&#038;crop=1 580w, https://engineering.fb.com/wp-content/uploads/2023/11/English_New-Security-Protections-in-WhatsApp-Calling.png?w=580&#038;h=326&#038;crop=1 326w" sizes="(max-width: 580px) 100vw, 580px" loading="lazy"> <header class="entry-header"> <span class="posted-on"><time class="entry-date published" datetime="Nov 08, 2023">Nov 08, 2023</time></span> <h4 class="entry-title">Enhancing the security of WhatsApp calls</h4> </header><!-- .entry-header --> </a> </article><!-- #post-## --> </div></div></aside><aside id="wpb_widget-3" class="widget widget_wpb_widget"><h3 class="widget-title">Related Positions</h3><hr><ul class="available-positions-list"><li class="available-positions-item"> <a href=https://www.metacareers.com/jobs/2349685008718613/> <div class="job-description"> Regulatory Readiness Program Manager </div> <div class="job-location"> LONDON, UK </div> </a> </li><li class="available-positions-item"> <a href=https://www.metacareers.com/jobs/9191951340829649/> <div class="job-description"> Privacy Program Manager - Privacy &amp; Competition Governance, Risk and Compliance </div> <div class="job-location"> DUBLIN, IRELAND </div> </a> </li><li class="available-positions-item"> <a href=https://www.metacareers.com/jobs/9191951340829649/> <div class="job-description"> Privacy Program Manager - Privacy &amp; Competition Governance, Risk and Compliance </div> <div class="job-location"> LONDON, UK </div> </a> </li><li class="available-positions-item"> <a href=https://www.metacareers.com/jobs/499915072799036/> <div class="job-description"> Product Security Engineer </div> <div class="job-location"> LONDON, UK </div> </a> </li><li class="available-positions-item"> <a href=https://www.metacareers.com/jobs/1027475188918044/> <div class="job-description"> Integrity Science Engineer </div> <div class="job-location"> MENLO PARK, US </div> </a> </li> </ul> <a href="https://www.metacareers.com"> <div class="btn available-positions-btn"> See All Jobs </div> </a> </aside> </div><!-- #secondary --> <!-- <php get_template_part('content-single-side-bar'); ?> --> <!-- Do the right sidebar check. --> </div><!-- Container end --> </div><!-- Wrapper end --> </div> <!-- ******************* The Footer Full-width Widget Area ******************* --> <div class="wrapper wrapper-community-outer"> <div class="wrapper-community"> <div class="community" tabindex="-1"> <div class="row"> <!-- community section is generated through WordPress widget --> <div id="wpb_widget-2" class="footer-widget widget_wpb_widget widget-count-3 col-md-4"><h3 class="widget-title">Available Positions</h3><hr><ul class="available-positions-list"><li class="available-positions-item"> <a href=https://www.metacareers.com/jobs/2349685008718613/> <div class="job-description"> Regulatory Readiness Program Manager </div> <div class="job-location"> LONDON, UK </div> </a> </li><li class="available-positions-item"> <a href=https://www.metacareers.com/jobs/9191951340829649/> <div class="job-description"> Privacy Program Manager - Privacy &amp; Competition Governance, Risk and Compliance </div> <div class="job-location"> DUBLIN, IRELAND </div> </a> </li><li class="available-positions-item"> <a href=https://www.metacareers.com/jobs/9191951340829649/> <div class="job-description"> Privacy Program Manager - Privacy &amp; Competition Governance, Risk and Compliance </div> <div class="job-location"> LONDON, UK </div> </a> </li><li class="available-positions-item"> <a href=https://www.metacareers.com/jobs/499915072799036/> <div class="job-description"> Product Security Engineer </div> <div class="job-location"> LONDON, UK </div> </a> </li><li class="available-positions-item"> <a href=https://www.metacareers.com/jobs/1027475188918044/> <div class="job-description"> Integrity Science Engineer </div> <div class="job-location"> MENLO PARK, US </div> </a> </li> </ul> <a href="https://www.metacareers.com"> <div class="btn available-positions-btn"> See All Jobs </div> </a> </div><!-- .footer-widget --><div id="custom_html-2" class="widget_text footer-widget widget_custom_html widget-count-3 col-md-4"><h3 class="widget-title">Technology at Meta</h3><div class="textwidget custom-html-widget"><ul class="stay-connected-lists"> <li class="stay-connected-item"> <img class="footer-fb-engineering stay-connected-item-left" src="/wp-content/themes/code-fb-com/img/meta_logo.png" alt="footer-fb-engineering" loading="lazy" width="70" height="70"> <div class="stay-connected-item-right"> <div class="stay-connected-label"> Engineering at Meta - X </div> <a onclick='return twitterFollow("fb_engineering")'> <button class="btn stay-connected-btn"> Follow </button> </a> </div> </li> <li class="stay-connected-item"> <img class="footer-fb-engineering stay-connected-item-left" src="/wp-content/themes/code-fb-com/img/meta_logo.png" alt="footer-AI" loading="lazy" width="70" height="70"> <div class="stay-connected-item-right"> <div class="stay-connected-label"> AI at Meta </div> <a href="https://ai.meta.com/blog/"> <button class="btn stay-connected-btn"> Read </button> </a> </div> </li> <li class="stay-connected-item"> <img class="footer-fb-engineering stay-connected-item-left" src="/wp-content/themes/code-fb-com/img/meta_logo.png" alt="footer-developers" loading="lazy" width="70" height="70"> <div class="stay-connected-item-right"> <div class="stay-connected-label"> Meta Quest Blog </div> <a href="https://www.meta.com/blog/quest/"> <button class="btn stay-connected-btn"> Read </button> </a> </div> </li> <li class="stay-connected-item"> <img class="footer-fb-engineering stay-connected-item-left" src="/wp-content/themes/code-fb-com/img/meta_logo.png" alt="footer-developers" loading="lazy" width="70" height="70"> <div class="stay-connected-item-right"> <div class="stay-connected-label"> Meta for Developers </div> <a href="https://developers.facebook.com/"> <button class="btn stay-connected-btn"> Read </button> </a> </div> </li> <li class="stay-connected-item"> <img class="footer-fb-engineering stay-connected-item-left" src="/wp-content/themes/code-fb-com/img/meta_logo.png" alt="footer-bug-bounty" loading="lazy" width="70" height="70"> <div class="stay-connected-item-right"> <div class="stay-connected-label"> Meta Bug Bounty </div> <a href="https://bugbounty.meta.com/"> <button class="btn stay-connected-btn"> Learn more </button> </a> </div> </li> <li class="stay-connected-item"> <img class="stay-connected-item-left" src="/wp-content/themes/code-fb-com/img/rss.png" alt="footer-rss" loading="lazy" width="70" height="70"> <div class="stay-connected-item-right"> <div class="stay-connected-label"> RSS </div> <a href="https://code.facebook.com/posts/rss/"> <button class="btn stay-connected-btn"> Subscribe </button> </a> </div> </li> </ul> </div></div><!-- .footer-widget --><div id="custom_html-3" class="widget_text footer-widget widget_custom_html widget-count-3 col-md-4"><h3 class="widget-title">Open Source</h3><div class="textwidget custom-html-widget"><p class="opensource-desc"> Meta believes in building community through open source technology. Explore our latest projects in Artificial Intelligence, Data Infrastructure, Development Tools, Front End, Languages, Platforms, Security, Virtual Reality, and more. </p> <ul class="opensource-cats"> <li class="opensource-cat"> <img src="/wp-content/themes/code-fb-com/img/android.png" alt="android" loading="lazy" width="50" height="59"> <div class="opensource-cap"> ANDROID </div> </li> <li class="opensource-cat"> <img src="/wp-content/themes/code-fb-com/img/ios.png" alt="ios" loading="lazy" width="48" height="58"> <div class="opensource-cap"> iOS </div> </li> <li class="opensource-cat"> <img src="/wp-content/themes/code-fb-com/img/web.png" alt="web" loading="lazy" width="55" height="49"> <div class="opensource-cap"> WEB </div> </li> <li class="opensource-cat"> <img src="/wp-content/themes/code-fb-com/img/backend.png" alt="backend" loading="lazy" width="56" height="51"> <div class="opensource-cap"> BACKEND </div> </li> <li class="opensource-cat"> <img src="/wp-content/themes/code-fb-com/img/hardware.png" alt="hardware" loading="lazy" width="55" height="44"> <div class="opensource-cap"> HARDWARE </div> </li> </ul> <button class="btn opensource-btn" onclick="window.location.href='https://opensource.fb.com/'"> Learn More </button> </div></div><!-- .footer-widget --> </div> </div> </div> </div><!-- #wrapper-footer-full --> <div class="wrapper-footer" id="wrapper-footer"> <div class="inner-container"> <div class="footer"> <div class="row"> <div class="col-md-12"> <footer class="meta-footer" id="meta-footer"> <div class="site-info row justify-content-between"> <div class="col-md-5 meta-logo-container"> <a href="https://about.facebook.com/"> <img src="https://engineering.fb.com/wp-content/themes/code-fb-com/img/meta_logo_full.svg" width="89" height="18" alt="Meta" /> </a> <div id="text-2" class="widget widget_text"> <div class="textwidget"><p>Engineering at Meta is a technical news resource for engineers interested in how we solve large-scale technical challenges at Meta.</p> </div> </div> </div> <div class="col-md-6 footer-meta-links-container"> <ul class="meta-footer-links"> <li class="footer-link"><a href="https://engineering.fb.com">Home</a></li><li class="footer-link"><a href="https://about.meta.com/">Company Info</a></li><li class="footer-link"><a href="https://www.metacareers.com/?ref=engineering.fb.com">Careers</a></li> </ul> </div> </div> </footer> </div> </div> </div> </div> <div class="footer"> <div class="row"> <div class="col-md-12"> <footer class="site-footer" id="colophon"> <div class="inner-container"> <div class="site-info row justify-content-between"> <div class="col-md-4 copyright-container"> <div class="copyright"> © 2024 Meta</div> </div> <!-- static footer --> <div class="col-md-7 footer-links-container"> <ul class="footer-links"> <li class="footer-link"><a href="https://www.facebook.com/policies">Terms</a></li><li class="footer-link"><a href="https://www.facebook.com/privacy/policy">Privacy</a></li><li class="footer-link"><a href="/privacy">Cookies</a></li><li class="footer-link"><a href="https://www.facebook.com/help">Help</a></li> </ul> </div> </div> </div><!-- .site-info --> </footer><!-- #colophon --> </div><!--col end --> </div><!-- row end --> </div><!-- //.inner-container --> </div><!-- wrapper end --> </div><!-- #page we need this extra closing tag here --> <div class="gdprconsent-container" id="GDPRConsentBar"> <div class="gdprconsent-wrapper"> <div class="gdprconsent-content"> <p>To help personalize content, tailor and measure ads and provide a safer experience, we use cookies. By clicking or navigating the site, you agree to allow our collection of information on and off Facebook through cookies. Learn more, including about available controls: <a href="/privacy">Cookie Policy</a></p> <div class="gdprconsent-button"> <button type="button" data-gdpr-accept>Accept</button> </div> </div> </div> </div> <!-- Twitter universal website tag code --> <script> if (window.gdprSafeTrack) { window.gdprSafeTrack(function() { !function(e,t,n,s,u,a){e.twq||(s=e.twq=function(){s.exe?s.exe.apply(s,arguments):s.queue.push(arguments); },s.version='1.1',s.queue=[],u=t.createElement(n),u.async=!0,u.src='//static.ads-twitter.com/uwt.js', a=t.getElementsByTagName(n)[0],a.parentNode.insertBefore(u,a))}(window,document,'script'); // Insert Twitter Pixel ID and Standard Event data below twq('init','o31u0'); twq('track','PageView'); }); } </script> <!-- End Twitter universal website tag code --> <script type="text/javascript"> window.WPCOM_sharing_counts = {"https:\/\/engineering.fb.com\/2024\/10\/22\/security\/ipls-privacy-preserving-storage-for-your-whatsapp-contacts\/":21812}; </script> <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-KZRLGZ8" height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript> <noscript><img height="1" width="1" style="display:none" src="https://www.facebook.com/tr?id=660742068067366&ev=PageView&noscript=1"/></noscript> <script type="text/javascript" id="video-analytics-js-after"> /* <![CDATA[ */ if (window.gdprSafeTrack) { window.gdprSafeTrack(function() { let youtube = document.querySelectorAll('[src*="youtube-nocookie"]'); for (let i = 0; i < youtube.length; i++) { youtube[i].src = youtube[i].src.replace('youtube-nocookie.com', 'youtube.com'); } let vimeo = document.querySelectorAll('[src*="vimeo"]'); for (let i = 0; i < vimeo.length; i++) { vimeo[i].src = vimeo[i].src.replace('&dnt=true', ''); } }); } /* ]]> */ </script> <script type="text/javascript" id="child-understrap-scripts-js-extra"> /* <![CDATA[ */ var loadmore_params = {"restfulURL":"https:\/\/engineering.fb.com\/wp-json\/fb\/v1\/loadmore","searchText":"","posts":"{\"page\":0,\"year\":2024,\"monthnum\":10,\"day\":22,\"name\":\"ipls-privacy-preserving-storage-for-your-whatsapp-contacts\",\"category_name\":\"security\",\"error\":\"\",\"m\":\"\",\"p\":0,\"post_parent\":\"\",\"subpost\":\"\",\"subpost_id\":\"\",\"attachment\":\"\",\"attachment_id\":0,\"pagename\":\"\",\"page_id\":0,\"second\":\"\",\"minute\":\"\",\"hour\":\"\",\"w\":0,\"tag\":\"\",\"cat\":\"\",\"tag_id\":\"\",\"author\":\"\",\"author_name\":\"\",\"feed\":\"\",\"tb\":\"\",\"paged\":0,\"meta_key\":\"\",\"meta_value\":\"\",\"preview\":\"\",\"s\":\"\",\"sentence\":\"\",\"title\":\"\",\"fields\":\"\",\"menu_order\":\"\",\"embed\":\"\",\"category__in\":[],\"category__not_in\":[],\"category__and\":[],\"post__in\":[],\"post__not_in\":[],\"post_name__in\":[],\"tag__in\":[],\"tag__not_in\":[],\"tag__and\":[],\"tag_slug__in\":[],\"tag_slug__and\":[],\"post_parent__in\":[],\"post_parent__not_in\":[],\"author__in\":[],\"author__not_in\":[],\"search_columns\":[],\"ignore_sticky_posts\":false,\"suppress_filters\":false,\"cache_results\":true,\"update_post_term_cache\":true,\"update_menu_item_cache\":false,\"lazy_load_term_meta\":true,\"update_post_meta_cache\":true,\"post_type\":\"\",\"posts_per_page\":12,\"nopaging\":false,\"comments_per_page\":\"50\",\"no_found_rows\":false,\"order\":\"DESC\"}","current_page":"1","max_page":"0","post_type":"post"}; var search_params = {"ajaxurl":"https:\/\/engineering.fb.com\/wp-admin\/admin-ajax.php","posts":"{\"page\":0,\"year\":2024,\"monthnum\":10,\"day\":22,\"name\":\"ipls-privacy-preserving-storage-for-your-whatsapp-contacts\",\"category_name\":\"security\",\"error\":\"\",\"m\":\"\",\"p\":0,\"post_parent\":\"\",\"subpost\":\"\",\"subpost_id\":\"\",\"attachment\":\"\",\"attachment_id\":0,\"pagename\":\"\",\"page_id\":0,\"second\":\"\",\"minute\":\"\",\"hour\":\"\",\"w\":0,\"tag\":\"\",\"cat\":\"\",\"tag_id\":\"\",\"author\":\"\",\"author_name\":\"\",\"feed\":\"\",\"tb\":\"\",\"paged\":0,\"meta_key\":\"\",\"meta_value\":\"\",\"preview\":\"\",\"s\":\"\",\"sentence\":\"\",\"title\":\"\",\"fields\":\"\",\"menu_order\":\"\",\"embed\":\"\",\"category__in\":[],\"category__not_in\":[],\"category__and\":[],\"post__in\":[],\"post__not_in\":[],\"post_name__in\":[],\"tag__in\":[],\"tag__not_in\":[],\"tag__and\":[],\"tag_slug__in\":[],\"tag_slug__and\":[],\"post_parent__in\":[],\"post_parent__not_in\":[],\"author__in\":[],\"author__not_in\":[],\"search_columns\":[],\"ignore_sticky_posts\":false,\"suppress_filters\":false,\"cache_results\":true,\"update_post_term_cache\":true,\"update_menu_item_cache\":false,\"lazy_load_term_meta\":true,\"update_post_meta_cache\":true,\"post_type\":\"\",\"posts_per_page\":12,\"nopaging\":false,\"comments_per_page\":\"50\",\"no_found_rows\":false,\"order\":\"DESC\"}","current_page":"1","max_page":"0","article_filter":"d54eb1f9e9"}; var more_articles = {"next_article":{"label":"Next","permalink":"https:\/\/engineering.fb.com\/2024\/10\/25\/developer-tools\/diff-authoring-time-dat-measuring-developer-productivity-meta\/","title":"Diff Authoring Time: Measuring developer productivity at Meta","thumbnail":["https:\/\/engineering.fb.com\/wp-content\/uploads\/2024\/10\/Meta-Tech-Podcast-ep-67-DAT.png?w=580&h=326&crop=1","580","326",true]},"prev_article":{"label":"Prev","permalink":"https:\/\/engineering.fb.com\/2024\/10\/15\/data-infrastructure\/open-future-networking-hardware-ai-ocp-2024-meta\/","title":"OCP Summit 2024: The open future of networking hardware for AI","thumbnail":["https:\/\/engineering.fb.com\/wp-content\/uploads\/2024\/10\/OCP-2024-DSF-Meta-2.png?w=580&h=326&crop=1","580","326",true]}}; /* ]]> */ </script> <script type="text/javascript" src="https://engineering.fb.com/_static/??/wp-content/themes/code-fb-com/dist/js/child-theme.min.js,/wp-content/themes/code-fb-com/js/prism.js?m=1720616012j" ></script><script type="text/javascript" id="sharing-js-js-extra"> /* <![CDATA[ */ var sharing_js_options = {"lang":"en","counts":"1","is_stats_active":""}; /* ]]> */ </script> <script type="text/javascript" src="https://engineering.fb.com/wp-content/mu-plugins/jetpack-13.9/_inc/build/sharedaddy/sharing.min.js?ver=13.9.1" id="sharing-js-js"></script> <script type="text/javascript" id="sharing-js-js-after"> /* <![CDATA[ */ var windowOpen; ( function () { function matches( el, sel ) { return !! ( el.matches && el.matches( sel ) || el.msMatchesSelector && el.msMatchesSelector( sel ) ); } document.body.addEventListener( 'click', function ( event ) { if ( ! event.target ) { return; } var el; if ( matches( event.target, 'a.share-facebook' ) ) { el = event.target; } else if ( event.target.parentNode && matches( event.target.parentNode, 'a.share-facebook' ) ) { el = event.target.parentNode; } if ( el ) { event.preventDefault(); // If there's another sharing window open, close it. if ( typeof windowOpen !== 'undefined' ) { windowOpen.close(); } windowOpen = window.open( el.getAttribute( 'href' ), 'wpcomfacebook', 'menubar=1,resizable=1,width=600,height=400' ); return false; } } ); } )(); var windowOpen; ( function () { function matches( el, sel ) { return !! ( el.matches && el.matches( sel ) || el.msMatchesSelector && el.msMatchesSelector( sel ) ); } document.body.addEventListener( 'click', function ( event ) { if ( ! event.target ) { return; } var el; if ( matches( event.target, 'a.share-x' ) ) { el = event.target; } else if ( event.target.parentNode && matches( event.target.parentNode, 'a.share-x' ) ) { el = event.target.parentNode; } if ( el ) { event.preventDefault(); // If there's another sharing window open, close it. if ( typeof windowOpen !== 'undefined' ) { windowOpen.close(); } windowOpen = window.open( el.getAttribute( 'href' ), 'wpcomx', 'menubar=1,resizable=1,width=600,height=350' ); return false; } } ); } )(); var windowOpen; ( function () { function matches( el, sel ) { return !! ( el.matches && el.matches( sel ) || el.msMatchesSelector && el.msMatchesSelector( sel ) ); } document.body.addEventListener( 'click', function ( event ) { if ( ! event.target ) { return; } var el; if ( matches( event.target, 'a.share-linkedin' ) ) { el = event.target; } else if ( event.target.parentNode && matches( event.target.parentNode, 'a.share-linkedin' ) ) { el = event.target.parentNode; } if ( el ) { event.preventDefault(); // If there's another sharing window open, close it. if ( typeof windowOpen !== 'undefined' ) { windowOpen.close(); } windowOpen = window.open( el.getAttribute( 'href' ), 'wpcomlinkedin', 'menubar=1,resizable=1,width=580,height=450' ); return false; } } ); } )(); /* ]]> */ </script> </body> </html>

Pages: 1 2 3 4 5 6 7 8 9 10