;(function() { window.createMeasureObserver = (measureName) => { var markPrefix = `_uol-measure-${measureName}-${new Date().getTime()}`; performance.mark(`${markPrefix}-start`); return { end: function() { performance.mark(`${markPrefix}-end`); performance.measure(`uol-measure-${measureName}`, `${markPrefix}-start`, `${markPrefix}-end`); performance.clearMarks(`${markPrefix}-start`); performance.clearMarks(`${markPrefix}-end`); } } }; /** * Gerenciador de eventos */ window.gevent = { stack: [], RUN_ONCE: true, on: function(name, callback, once) { this.stack.push([name, callback, !!once]); }, emit: function(name, args) { for (var i = this.stack.length, item; i--;) { item = this.stack[i]; if (item[0] === name) { item[1](args); if (item[2]) { this.stack.splice(i, 1); } } } } }; var runningSearch = false; var hadAnEvent = true; var elementsToWatch = window.elementsToWatch = new Map(); var innerHeight = window.innerHeight; // timestamp da última rodada do requestAnimationFrame // É usado para limitar a procura por elementos visíveis. var lastAnimationTS = 0; // verifica se elemento está no viewport do usuário var isElementInViewport = function(el) { var rect = el.getBoundingClientRect(); var clientHeight = window.innerHeight || document.documentElement.clientHeight; // renderizando antes, evitando troca de conteúdo visível no chartbeat-related-content if(el.className.includes('related-content-front')) return true; // garante que usa ao mínimo 280px de margem para fazer o lazyload var margin = clientHeight + Math.max(280, clientHeight * 0.2); // se a base do componente está acima da altura da tela do usuário, está oculto if(rect.bottom < 0 && rect.bottom > margin * -1) { return false; } // se o topo do elemento está abaixo da altura da tela do usuário, está oculto if(rect.top > margin) { return false; } // se a posição do topo é negativa, verifica se a altura dele ainda // compensa o que já foi scrollado if(rect.top < 0 && rect.height + rect.top < 0) { return false; } return true; }; var asynxNextFreeTime = () => { return new Promise((resolve) => { if(window.requestIdleCallback) { window.requestIdleCallback(resolve, { timeout: 5000, }); } else { window.requestAnimationFrame(resolve); } }); }; var asyncValidateIfElIsInViewPort = function(promise, el) { return promise.then(() => { if(el) { if(isElementInViewport(el) == true) { const cb = elementsToWatch.get(el); // remove da lista para não ser disparado novamente elementsToWatch.delete(el); cb(); } } }).then(asynxNextFreeTime); }; // inicia o fluxo de procura de elementos procurados var look = function() { if(window.requestIdleCallback) { window.requestIdleCallback(findByVisibleElements, { timeout: 5000, }); } else { window.requestAnimationFrame(findByVisibleElements); } }; var findByVisibleElements = function(ts) { var elapsedSinceLast = ts - lastAnimationTS; // se não teve nenhum evento que possa alterar a página if(hadAnEvent == false) { return look(); } if(elementsToWatch.size == 0) { return look(); } if(runningSearch == true) { return look(); } // procura por elementos visíveis apenas 5x/seg if(elapsedSinceLast < 1000/5) { return look(); } // atualiza o último ts lastAnimationTS = ts; // reseta status de scroll para não entrar novamente aqui hadAnEvent = false; // indica que está rodando a procura por elementos no viewport runningSearch = true; const done = Array.from(elementsToWatch.keys()).reduce(asyncValidateIfElIsInViewPort, Promise.resolve()); // obtém todos os elementos que podem ter view contabilizados //elementsToWatch.forEach(function(cb, el) { // if(isElementInViewport(el) == true) { // // remove da lista para não ser disparado novamente // elementsToWatch.delete(el); // cb(el); // } //}); done.then(function() { runningSearch = false; }); // reinicia o fluxo de procura look(); }; /** * Quando o elemento `el` entrar no viewport (-20%), cb será disparado. */ window.lazyload = function(el, cb) { if(el.nodeType != Node.ELEMENT_NODE) { throw new Error("element parameter should be a Element Node"); } if(typeof cb !== 'function') { throw new Error("callback parameter should be a Function"); } elementsToWatch.set(el, cb); } var setEvent = function() { hadAnEvent = true; }; window.addEventListener('scroll', setEvent, { capture: true, ive: true }); window.addEventListener('click', setEvent, { ive: true }); window.addEventListener('resize', setEvent, { ive: true }); window.addEventListener('load', setEvent, { once: true, ive: true }); window.addEventListener('DOMContentLoaded', setEvent, { once: true, ive: true }); window.gevent.on('allJSLoadedAndCreated', setEvent, window.gevent.RUN_ONCE); // inicia a validação look(); })();
  • AssineUOL
Topo

Fachin entende que WhatsApp não pode ser suspenso se recusar quebrar sigilo

O ministro Edson Fachin durante sessão plenária no Supremo Tribunal Federal - Fátima Meira/Futura Press/Estadão Conteúdo
O ministro Edson Fachin durante sessão plenária no Supremo Tribunal Federal Imagem: Fátima Meira/Futura Press/Estadão Conteúdo

Helton Simões Gomes

De Tilt, em São Paulo

28/05/2020 17h25

Sem tempo, irmão

  • STF julga se os bloqueios ao WhatsApp com base no Marco Civil da Internet são ilegais
  • O aplicativo de mensagem já foi tirado do ar três vezes no Brasil
  • Corte avalia duas ações, relatadas por Rosa Weber e Edson Fachin, que questionam bloqueio do serviço
  • Weber votou ontem, afastando a possibilidade da suspensão do serviço
  • Fachin entendeu que plataformas não são obrigadas a fornecer conteúdos criptografados

O ministro do Supremo Tribunal Federal Edson Fachin se mostrou contra a ideia de que o WhatsApp deva ser bloqueado no Brasil por recusar quebra de sigilo das mensagens. O STF retomou nesta quinta-feira (28) o julgamento sobre se as decisões judiciais que levaram ao bloqueio do app no país, em 2015 e 2016, foram constitucionais.

O julgamento também avalia se os trechos do Marco Civil da Internet (MCI) usados nestas decisões judiciais contrariam a Constituição Federal.

Como o ministro Alexandre de Moraes pediu vistas, uma nota data será marcada para continuar o julgamento. Na quarta-feira (27), Rosa Weber acompanhou o voto de Fachin na ação relatada por ele, a ADPF 403. Já Fachin se alinhou ao entendimento de Weber na ação relatada por ela, a ADI 5527.

Fachin votou por afastar a possibilidade de o Marco Civil embasar ações para tirar o aplicativo do ar, já que a lei não traz dispositivos que obriguem aplicativos a fornecer mensagens criptografadas. Permitir a quebra de sigilo das comunicações afetaria o direito dos cidadãos à privacidade, garantido pela Constituição.

Direitos digitais são direitos fundamentais
Edson Fachin, ministro do STF

Para Fachin, o MCI não obriga que plataformas forneçam comunicações criptografadas nem mesmo em investigações criminais. Isso colocaria em risco a integridade de toda a plataforma, o que poderia afetar o sigilo das conversas de todos os outros usuários.

O aplicativo WhatsApp não permite que o conteúdo das comunicações trocadas entre os usuários seja disponibilizado, porque isso exigiria que o aplicativo alterasse seu sistema de criptografia, introduzindo uma vulnerabilidade em seu sistema (?) penso que não há como obrigar que as aplicações de internet que ofereçam criptografia ponta-a-ponta quebrem o sigilo do conteúdo de comunicações

As restrições impostas pela criptografia, uma técnica que embaralha conteúdos digitais, viraram um ponto central neste julgamento.

O assunto chegou ao Supremo porque, desde 2015, quatro decisões judiciais exigiram a retirada do WhatsApp do ar após a empresa não fornecer conteúdos de conversas mantidas por pessoas investigadas pela polícia —três delas efetivamente levaram à suspensão do app.

O Facebook, dono da plataforma, sempre alegou que não poderia fornecer os materiais porque as conversas são protegidas por criptografia e não ficam guardadas em seus servidores, mas, sim, nos terminais dos usuários. A criptografia usada pelo WhatsApp é a chamada de ponta-a-ponta, de modo que os conteúdos são embaralhados no aparelho do emissor e só são decifrados no dispositivo de destino.

O juiz levou em conta a opinião de especialistas de que as conversas só poderiam ser interceptadas se todo o sistema de segurança fosse comprometido, pois a criptografia vale para todos os usuários. Além disso, o método, uma espécie de "grampo digital", só valeria a partir de sua implantação e não para mensagens enviadas anteriormente.

Fachin também entendeu que não cabe a juízes usarem artigos do MCI para punir o WhatsApp pelo descumprimento de uma decisão inexequível e tirar o aplicativo do ar.

Não cabe aos juízes que ordinariamente autorizam as interceptações telemáticas aplicar a sanção prevista no art. 12, III, do Marco Civil da Internet (?) A suspensão das atividades do aplicativo ou mesmo sua proibição, mesmo diante da baixa institucionalidade, não caberá para o caso de descumprimento de decisão judicial de quebra de criptografia, mas para um quadro de violação grave do dever de obediência à legislação

O voto de Fachin foi no mesmo sentido no voto proferido pela ministra Rosa Weber, tanto em relação à criptografia quanto na impossibilidade de bloqueio a apps como o WhatsApp com base nos dispositivos do MCI.

Estou convencido, tal como a excelentíssima ministra Rosa Weber, que a sanção de suspensão apenas tem lugar quando os aplicativos de internet tiverem violado os direitos de privacidade dos usuários

Uma punição tão pesada só deveria ocorrer caso o aplicativo afrontasse algum direito dos usuários.

O que está em jogo no julgamento?

As ações a respeito do WhatsApp tramitam no tribunal desde 2016. Fachin é relator de uma delas, a ADPF (Arguição de Descumprimento de Preceito Fundamental) 403. Já a ministra Weber é relatora de outra, a ADI (Ação Direta de Inconstitucionalidade) 5527.

A primeira delas foi protocola pelo PPS (Partido Popular Socialista) e a segunda, aberta pelo PR (Partido Republicado). Ambas questionam o bloqueio ao aplicativo de mensagens em 2016. Desde 2015, juízes brasileiros mandaram o WhatsApp ser suspenso quatro vezes. Em três oportunidades, isso ocorreu.

Em maio de 2016, um juiz de Sergipe decidiu que todas as operadoras de telefonia impedirem o o ao WhatsApp pela empresa não ter cumprido uma ordem judicial para quebrar o sigilo das mensagens enviadas pelo app. Esse conteúdo era pleiteado por uma investigação de tráfico de drogas no município de Lagarto (SE).

O PPS defende que as suspensões de apps com base na premissa do juiz de Sergipe são ilegais. O partido argumenta que decisões desse tipo violam os preceitos fundamentais da liberdade de expressão e comunicação, presentes na Constituição Federal e no Marco Civil da Internet.

Já o PR questiona os dispositivos no MCI usados para a embasar a decisão que tirou o WhatsApp do ar. O Marco Civil determina que as plataformas conectadas só podem ser responsabilizadas judicialmente por algum conteúdo veiculado nelas se descumprirem decisões da Justiça.